浅谈vite之import.meta
一. 解析
开发者使用一个模块时,有时需要知道模板本身的一些信息(比如模块的路径)。现在有一个提案,为 import 命令添加了一个元属性
import.meta,返回当前模块的元信息。
import.meta只能在模块内部使用,如果在模块外部使用会报错。
这个属性返回一个对象,该对象的各种属性就是当前运行的脚本的元信息。具体包含哪些属性,标准没有规定,由各个运行环境自行决定。一般来说,import.meta至少会有下面两个属性。
(1)import.meta.url
import.meta.url返回当前模块的 URL 路径。举例来说,当前模块主文件的路径是https://foo.com/main.js,import.meta.url就返回这个路径。如果模块里面还有一个数据文件data.txt,那么就可以用下面的代码,获取这个数据文件的路径。
new URL('data.txt', import.meta.url)
注意,Node.js 环境中,import.meta.url返回的总是本地路径,即是file:URL协议的字符串,比如file:///home/user/foo.js。
(2)import.meta.scriptElement
import.meta.scriptElement是浏览器特有的元属性,返回加载模块的那个<script>元素,相当于document.currentScript属性。
// HTML 代码为
// <script type="module" src="my-module.js" data-foo="abc"></script>
// my-module.js 内部执行下面的代码
import.meta.scriptElement.dataset.foo
// "abc"
二. 应用
1. 动态环境变量:基于Vite和Rollup插件系统,import.meta.env 能够自动将.env文件的值注入到你的代码中。
- 根目录下新建
.env(默认环境),.env.development和.env.production
NODE_ENV = "development"
VITE_BASE_URL = "http://127.0.0.1:3333"
- 通过 import.meta.env.VITE_BASE_URL 读取环境变量的参数
- import.meta.env.MODE: {string}应用程序运行的模式。
- import.meta.env.BASE_URL:{string}应用程序提供服务的基础url。这由基本配置选项决定。
- import.meta.env.PROD: {boolean}是否在生产环境中运行
- import.meta.env.DEV: {boolean}应用是否在开发中运行(总是与import.meta.env.PROD相反)
2.import.meta.glob() 是一个 ES 模块的特殊属性,用于动态导入多个模块
- import.meta.glob() 方法接受一个模式字符串作为参数,并返回一个Promise,该Promise 析为一个对象,该对象包含匹配该模式的所有模块的键值对。
- 模式字符串可以包含通配符 *,用于匹配多个模块。例如,import.meta.glob('./modules/*.js') 可以匹配当前目录下以 .js 结尾的所有模块。
- 使用 import.meta.glob() 可以方便地批量导入模块,而不需要手动一个一个地导入。
需要注意的是,
import.meta.glob() 是 ES 模块的特性,
目前仅在一些现代浏览器和支持 ES 模块的 Node.js 版本中可用,
在旧的浏览器或 Node.js 版本中,可能需要使用其他方式来实现类似的功能
在这里,使用import.meta.glob(),导入指定模式的固定路由模块,代码如下:
/** 自动导入全部静态路由,无需再手动引入!匹配 src/router/modules 目录(任何嵌套级别)中具有 .ts 扩展名的所有文件,如果需要做排除,请使用'!'符号,例如:!./modules/*** 如何匹配所有文件请看:https://github.com/mrmlnc/fast-glob#basic-syntax* 如何排除文件请看:https://cn.vitejs.dev/guide/features.html#negative-patterns*/
// 导入非result相关路由
const fixedModules = import.meta.glob('./modules/**/!(result).ts', { eager: true })
// 导入result相关路由
const resultModules = import.meta.glob('./modules/**/result.ts', { eager: true })
//导入所有路由
const modules: Record<string, any> = import.meta.glob(['./modules/**/*.ts'], { eager: true })
模式字符串 ./modules/**/!(result).ts 解析如下:
- ./modules/:表示要匹配的文件路径的起始部分,
- **/:表示可以匹配任意多层子目录,
- !(result):表示排除匹配到的文件名为result的文件,
- .ts:表示文件扩展名为.ts
- { eager: true }参数表示立即加载这些模块
相关文章:
浅谈vite之import.meta
一. 解析 开发者使用一个模块时,有时需要知道模板本身的一些信息(比如模块的路径)。现在有一个提案,为 import 命令添加了一个元属性 import.meta,返回当前模块的元信息。 import.meta只能在模块内部使用,如…...
【Pytorch实用教程】Pytorch中nn.Sequential的用法
nn.Sequential 是 PyTorch 中用于构建神经网络的一种容器类,它可以按顺序封装多个子模块(层),并依次将输入数据传递给这些子模块。这样可以简化模型的定义,使得代码更加简洁和易读。 文章目录 基本用法方法一:直接传递子模块方法二:使用 `OrderedDict`动态构建模型优点注…...
Shopify被封?Shopify店铺开店到防封全面指南
Shopify,作为独立电商建站领域的佼佼者,其SaaS模式简化了建站流程,无需编程背景即可创建线上店铺,吸引了众多商家的目光。本文将详细讲解Shopify店铺从注册、运营到防封的每一个关键环节,为商家提供一站式指导…...
11. 盛最多水的容器
一题目: 二:代码: class Solution { public:int maxArea(vector<int>& height) {int l0;int rheight.size()-1;int ans0;while(l<r){int a(r-l)*min(height[l],height[r]);ansmax(ans,a);if(height[l]<height[r]) l;else r-…...
react如何父子组件传参
在React中,父子组件之间的传参主要通过props(属性)来实现。子组件通过props接收来自父组件的数据,而父组件则可以通过在子组件标签上设置属性(即props)来传递数据。下面是一个简单的例子来说明这个过程。 …...
【C++】二维数组 数组名
二维数组名用途 1、查看所占内存空间 2、查看二维数组首地址 针对第一种用途,还可以计算数组有多少行、多少列、多少元素 针对第二种用途,数组元素、行数、列数都是连续的,且相差地址是有规律的 下面是一个实例 #include<iostream&g…...
【蘑菇书EasyRL】强化学习,笔记整理
【蘑菇书EasyRL】强化学习,笔记整理 1.笔记整理1.1 学习和决策代码框架 2. 遇到的buggym 环境,新版本python无法使用env_specs envs.registry.all() 报错 蘑菇书的教程地址: https://datawhalechina.github.io/easy-rl/#/chapter1/chapter1?…...
尚硅谷谷粒商城项目笔记——三、安装docker【电脑CPU:AMD】
三、安装docker 注意: 因为电脑是AMD芯片,自己知识储备不够,无法保证和课程中用到的环境一样,所以环境都是自己根据适应硬件软件环境重新配置的,这里的虚拟机使用的是VMware。 首先关闭防火墙和安全策略 systemctl…...
【8-9月份唯一机械电气计算机主题的IEEE会议】第七届机电一体化与计算机技术工程国际学术会议(MCTE 2024,8月23-25)
由广东博士创新发展促进会、输变电装备技术全国重点实验室联合主办,重庆大学电气工程学院、AEIC学术交流中心协办的第七届机电一体化与计算机技术工程国际学术会议(MCTE 2024)将于2024年8月23-25日在中国广州隆重举行。 大会诚挚邀请您投递相…...
YOLOv8改进 | 主干网络 | 简单而优雅且有效的VanillaNet 【华为诺亚方舟】
秋招面试专栏推荐 :深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 💡💡💡本专栏所有程序均经过测试,可成功执行💡💡💡 专栏目录 :《YOLOv8改进有效涨点》专栏介绍 & 专栏目录 | 目前已有80+篇内容,内含各种Head检测头、损失函数Loss、…...
Tomcat高可用集群(实例详解)
一.环境准备 虚拟机的版本:VMware-workstation-full-15.5.6-16341506.exe系统镜像版本:CentOS-6.10-x86_64-bin-DVD1.iso,全新安装,桌面版,可上网系统内存大小:1GB系统硬盘大小:20GB连接工具版…...
搭建自己的金融数据源和量化分析平台(五):更新两市退市股票信息
在前面的股票列表设计中,我们有一个list_status字段,可能的值为L上市 D退市 P暂停上市。 由于股票可能会被退市,因此需要该字段来维护上市状态。 深市爬虫: # 读取深交所最新退市股票列表 def get_delisted_stock_list():cache_f…...
Redis复习总结
之前写的博客太杂,最近想把Redis的知识点再系统的过一遍,带着自己的理解使用简短的话把一些问题总结一下,尤其是开发中和面试中的高频问题,基础知识点参考–>Redis入门、Spring Cache,这篇不再赘述。 目录 基础简介;与Memcached的区别;为什么作为mysql缓存?如何保证R…...
基于JSP的医院挂号系统
你好,我是专注于医疗信息系统的计算机专业毕业生。如果您对医院挂号系统感兴趣或有相关需求,欢迎随时联系我。 开发语言:Java 数据库:MySQL 技术:JSP技术 工具:MyEclipse 系统展示 首页 管理员功能模…...
Chainlit快速实现AI对话应用1 分钟内实现聊天数据的持久化保存
概述 默认情况下,Chainlit 应用不会保留其生成的聊天和元素。即网页一刷新,所有的聊天记录,页面上的所有聊天记录都会消失。但是,存储和利用这些数据的能力可能是您的项目或组织的重要组成部分。 一旦启用,数据持久性…...
STM32DMA数据传输
我估计大多数人学这么久连听说都没听说过DMA,更不用提知道它是干嘛的。其实DMA的本质就是一个数据的搬运工。平常的时候当我们没有配置的时候,一直都是CPU在搬运数据,但是这个活又累又没有技术含量,所以DMA的重要性还是有的。 目…...
Python学习笔记50:游戏篇之外星人入侵(十一)
前言 本篇文章接着之前的内容,继续对游戏功能进行优化,主要是优化游戏状态以及对应的处理。 状态 一个游戏包含多种状态,这个状态是一个可以很复杂也可以很简单的内容。条件所限,我们这个游戏的状态就比较简单: 未…...
vue3踩坑问题记录
//vue3element-plus //1、placeholder换行显示 const startTxt ref() const contentText ref<any>() startTxt.value "请描述问题内容、例如:" historyData.prompt.forEach((el:any)>{contentText.value \n${el.question}}) <ElInputv-mo…...
Python 爬虫实战:Scrapy 框架详解与应用
🛠️ Scrapy 框架基本使用 Scrapy 是一个强大的 Python 爬虫框架,提供了用于提取和处理网页数据的功能。以下是 Scrapy 的基本使用步骤: 安装 Scrapy pip install scrapy创建 Scrapy 项目 scrapy startproject myproject这将生成一个基础…...
60 函数参数——关键参数
关键参数主要指调用函数时的参数传递方式,与函数定义无关。 通过关键参数可以按参数名字传递值,明确指定哪个值传递给哪个参数,实参顺序可以和形参顺序不一致,但不影响参数值的传递结果,避免了用户需要牢记参数位置和…...
养殖场环境控制系统:大数据分析,优化养殖方案
一、应用背景 当前我国畜禽养殖正从传统散户养殖向规模化、集约化转型,而环境因素(温湿度、有害气体、光照等)是影响畜禽生长发育、繁殖效率、疫病防控的核心要素。据行业数据显示,2023年全球智慧农业市场规模达2200亿美元,畜牧养殖环境监控系…...
告别虚拟机!在Windows 11上零配置搭建Masm汇编实验环境(附保姆级图文教程)
在Windows 11上零配置搭建Masm汇编实验环境的完整指南 对于计算机专业的学生和汇编语言初学者来说,搭建一个可用的实验环境往往是第一道门槛。传统方法要么需要配置复杂的虚拟机,要么依赖过时的DOS模拟器,这些方案不仅占用系统资源࿰…...
FasterRCNN训练完别急着关!用predict.py批量预测并保存结果的完整配置指南
FasterRCNN模型预测实战:从批量推理到结果保存的全流程解析 当你终于完成FasterRCNN模型漫长的训练过程,看着损失曲线平稳下降,验证集指标达到预期,那种成就感不言而喻。但很多开发者在这里犯了一个常见错误——直接关闭项目转向下…...
从‘Hello World’到跨平台项目:手把手教你用CMake+Clang/LLVM配置现代C++开发环境
从‘Hello World’到跨平台项目:手把手教你用CMakeClang/LLVM配置现代C开发环境 在C开发领域,构建系统的选择和配置往往决定了项目的可维护性和跨平台能力。传统上,开发者可能依赖单一编译器或IDE内置工具链,但随着项目复杂度提升…...
ROS新手必看:5分钟搞定usb_cam相机标定(附棋盘格下载)
ROS实战:从零完成USB摄像头标定的完整指南 在机器人视觉系统中,相机标定是确保测量精度的基础步骤。许多ROS初学者往往在第一步就遇到障碍——要么找不到合适的标定工具,要么被复杂的参数配置搞得晕头转向。本文将带你用最直接的方式完成整个…...
Linux设备驱动 -- RTC驱动移植DS1339
查看原理图RTC芯片采用的是DS1339芯片,这是达拉斯半导体公司的一款RTC芯片,使用I2C接口。 芯片接在RK3568的I2C5。 Linux内核支持DS1339 检索linux内核是否支持DS1339芯片驱动。 通过搜索可知到,Linux系统内核中已有达拉斯DS1339的驱动&#…...
从零搭建Chiplet系统?保姆级梳理UCIe实战中的那些“坑”:Sideband流控、时钟门控与多模块链路
从零搭建Chiplet系统:UCIe实战中的关键挑战与解决方案 在半导体行业追求更高性能、更低功耗的今天,Chiplet技术已成为突破传统单芯片设计瓶颈的重要路径。作为连接不同Chiplet的"桥梁",UCIe(Universal Chiplet Interconnect Expres…...
从零到百:用Python代码解放剪映生产力,告别重复剪辑劳动
从零到百:用Python代码解放剪映生产力,告别重复剪辑劳动 【免费下载链接】JianYingApi Third Party JianYing Api. 第三方剪映Api 项目地址: https://gitcode.com/gh_mirrors/ji/JianYingApi 想象一下这样的场景:你是一家电商公司的视…...
从办公室到车间:给IT网管的Profinet入门避坑指南(含VLAN与安全配置)
从办公室到车间:IT工程师的Profinet工业网络融合实战手册 当IT工程师第一次踏入嘈杂的工厂车间,面对那些闪烁着信号灯的PLC和伺服驱动器时,往往会感到一丝无所适从。这就像一位习惯在城市道路驾驶的司机,突然被要求操作一架喷气式…...
Windows HEIC缩略图插件:3分钟解决iPhone照片在Windows上的预览难题
Windows HEIC缩略图插件:3分钟解决iPhone照片在Windows上的预览难题 【免费下载链接】windows-heic-thumbnails Enable Windows Explorer to display thumbnails for HEIC/HEIF files 项目地址: https://gitcode.com/gh_mirrors/wi/windows-heic-thumbnails …...
