当前位置: 首页 > news >正文

【前端】Vite中import.meta功能详解

文章目录

      • 1. import.meta.env:环境变量
      • 2. import.meta.glob:动态导入文件
      • 3. import.meta.hot:模块热替换(HMR)
      • 4. import.meta.url:模块 URL
      • 5. 其他注意事项
      • 示例代码

在 Vite 项目中, import.meta 是一个 元属性,由现代浏览器原生支持(基于 ES 模块标准),它提供了当前模块的上下文信息。Vite 进一步扩展了它,提供了特定于开发和生产环境的功能。以下是关键特性详解:


1. import.meta.env:环境变量

获取项目环境相关的变量:

console.log(import.meta.env)
  • 内置变量:
    • MODE: 当前环境(development/production
    • BASE_URL: 部署基路径(vite.config.js 中的 base
    • PROD: 是否生产环境(布尔值)
    • DEV: 是否开发环境(布尔值)
    • SSR: 是否服务端渲染(布尔值)
  • 自定义变量:
    • VITE_ 开头的变量(如 VITE_API_URL)会被注入
      .env 文件示例:
      VITE_API_URL = "https://api.example.com"
      
      使用:import.meta.env.VITE_API_URL

2. import.meta.glob:动态导入文件

批量导入匹配的文件(返回异步函数):

// 导入 components 目录下所有 .vue 文件
const modules = import.meta.glob('./components/*.vue');
// 使用:modules 返回 Promise
// 同步导入(eager: true)
const modules = import.meta.glob('./data/*.json', { eager: true });
// modules['./data/config.json'] 直接返回解析后的 JSON

3. import.meta.hot:模块热替换(HMR)

开发环境下实现热更新:

if (import.meta.hot) {// 监听当前模块更新import.meta.hot.accept((newModule) => {console.log('模块已热更新', newModule);});// 传递自定义数据到 HMRimport.meta.hot.send('custom-event', { data: 123 });
}

4. import.meta.url:模块 URL

获取当前模块的完整 URL(浏览器环境):

const moduleURL = import.meta.url; 
// 输出:file:///path/to/project/src/main.js(开发环境)

5. 其他注意事项

  • 构建优化
    import.meta.env 中的值在构建时会被静态替换,例如 import.meta.env.PROD 直接变为 truefalse
  • 浏览器兼容性
    需确保目标浏览器支持 ES 模块(现代浏览器均支持)。
  • TypeScript 支持
    vite/client.d.ts 中预定义类型,无需额外配置。

示例代码

// 获取环境变量
const apiUrl = import.meta.env.VITE_API_URL;// 动态导入组件
const getComponent = async (name) => {const module = await import.meta.glob(`./components/${name}.vue`);return module;
};// 开发环境热更新
if (import.meta.hot) {import.meta.hot.accept();
}

通过 import.meta,Vite 将环境变量、模块操作和 HMR 等功能无缝集成到现代 JavaScript 模块系统中,大幅提升开发体验。

http://www.dtcms.com/a/318589.html

相关文章:

  • 【多模态微调】【从0开始】Qwen2-VL + llamafactory
  • 小杰python高级(one day)——numpy库
  • 应急响应-windows篇
  • Spring选择哪种方式代理?
  • 12、Docker Compose 安装 Redis
  • CGAL Kernel 和 Traits 类深度解析:从官方教程到实践应用
  • 疯狂星期四文案网第30天运营日记
  • 从Token到序列:阿里GSPO算法如何让大模型训练更稳、更强?
  • CubeFS存储(一)
  • 16-DS18B20-±0.5℃精度-12bitADC--55°C ~ +125°C
  • ubuntu server 工业环境部署手册[2025-08-06]
  • ⭐CVPR 文本到 3D 场景生成新突破:Prometheus 框架解析
  • http请求结构体解析
  • 【C++】二叉树进阶
  • 人工智能大数据模型驱动企业创新
  • 商用密码应用安全性评估法律法规的重要性及演变过程
  • 力扣-15.三数之和
  • 五、Istio管理网格外部服务
  • 快速准确的千兆像素病理图像分类,采用分层蒸馏多实例学习(每日一文)
  • ssm复习
  • 【RabbitMQ】高级特性—死信队列详解
  • 560. 和为 K 的子数组 - 前缀和思想
  • MATLAB下载教程MATLAB R2025a 保姆级安装步骤(附安装包)
  • 数据结构——双向链表及makefile
  • c++ 中 原子锁、互斥锁、自旋锁的区别和详细用法
  • 大模型 + 垂直场景:搜索 / 推荐 / 营销 / 客服领域开发
  • 【Redis】Linux部署redis 7集群部署三主三从、ACL新建用户及密码(图文教程)
  • ​ubuntu22.04系统入门 (四)linux入门命令 权限管理、ACL权限、管道与重定向
  • 集合数据类型Map和Set
  • pcl手动直通滤波