当前位置: 首页 > 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.lryc.cn/news/612501.html

相关文章:

  • 深度修改elementUI样式思路
  • 《Day2-PyTorch Tensor 从入门到实践:核心操作与避坑指南》
  • 磁悬浮转子变转速工况下的振动抑制全解析
  • Conditional Modeling Based Automatic Video Summarization
  • 云平台托管集群:EKS、GKE、AKS 深度解析与选型指南-第二章
  • [Python 基础课程]猜数字游戏
  • HIVE 窗口函数处理重复数据
  • 【C/C++】形参、实参相关内容整理
  • GISBox中OSGB数据转3DTiles格式指南
  • 开源流媒体服务器ZLMediaKit 的Java Api实现的Java版ZLMediaKit流媒体服务器-二开视频对话
  • java 之 继承
  • 【Java】HashMap的key可以为null吗?如何存储的?
  • JavaScript 基础语法
  • TDengine IDMP 背后的技术三问:目录、标准与情景
  • TCP的三次握手和四次挥手实现过程。以及为什么需要三次握手?四次挥手?
  • 8、项目管理
  • 力扣 hot100 Day67
  • 二、Envoy静态配置
  • CentOS8.5安装19c单机告警及处理
  • CS课程项目设计8:基于Canvas支持AI人机对战的五子棋游戏
  • LeetCode 面试经典 150_数组/字符串_O(1)时间插入、删除和获取随机元素(12_380_C++_中等)(哈希表)
  • Linux firewall 防火墙管理
  • Linux systemd 系统管理:systemctl 控制服务与守护进程
  • 深入理解 qRegisterMetaType<T>()
  • 【数据可视化-82】中国城市幸福指数可视化分析:Python + PyEcharts 打造炫酷城市幸福指数可视化大屏
  • JAVA算法练习题day9
  • 蓝桥杯----锁存器、LED、蜂鸣器、继电器、Motor
  • Pytest项目_day06(requests中Session的用法)
  • Python 进行点云ICP(lterative Closest Point)配准(精配准)
  • Java高频方法总结