前端获取环境变量方式区分(Vite)

loadEnv,process.env,import.meta.env这三个虽然都涉及到"环境变量",但它们在使用场景和作用上有明显不同

1. process.env

  • 作用场景:仅在 Node.js 环境中使用,比如在 vite.config.ts、服务器端脚本或 Node.js 项目中。
  • 来源 :系统级别或命令行工具(例如 cross-env)设置的环境变量。
  • 特点:运行时动态获取,不会经过编译时的替换,包含了你启动命令传入的变量,但不会自动注入到客户端代码中。

2. loadEnv

  • 作用场景:在 Vite 配置文件(vite.config.ts)中使用,它是 Vite 提供的工具函数。
  • 来源 :从项目 根目录的 .env 文件(如 .env、.env.development、.env.production)中读取并解析环境变量。
  • 特点 :只会加载 .env 文件中定义的变量,并返回一个对象。loadEnv 是在构建/启动时运行的,它不包含通过 cross-env 直接设置在 process.env 中的变量,除非你手动合并。

3. import.meta.env

  • 作用场景 :用于客户端(浏览器端)的代码中,比如你的 Vue 组件 或者其他前端文件
  • 来源 :在 Vite 构建过程中,Vite 会把符合条件的环境变量(需要以 VITE_ 开头 )注入到客户端代码的 import.meta.env 中。
  • 特点:这些变量在构建时被静态替换,保证了构建后的代码可以直接使用环境配置,同时只暴露了允许暴露给客户端的变量。

关系图示

css 复制代码
    A[系统/命令行环境变量] -->|cross-env| B[process.env]
    B -->|在 Node 环境中使用| C[vite.config.ts]
    C -->|调用 loadEnv 读取 .env 文件| D[.env / .env.development / ...]
    D -->|返回结果供配置使用| E[loadEnv() 返回对象]
    C -->|结合 process.env (手动合并)| F[最终环境变量对象]
    F -->|在构建过程中注入| G[import.meta.env (客户端)]

小结

  • process.env:Node.js 中真实存在的环境变量集合,通常由操作系统或 cross-env 设置。
  • loadEnv() :Vite 的工具函数,用来加载 .env 文件中的变量,主要在 Vite 配置时使用。
  • import.meta.env :构建后暴露给前端代码的环境变量,必须以 VITE_ 开头,经过 Vite 静态替换。

它们虽然都与环境变量相关,但使用场景和生命周期不同,并不是一个东西,而是实现环境变量管理的不同层次和阶段。

相关推荐
爱分享的程序员27 分钟前
前端面试专栏-算法篇:18. 查找算法(二分查找、哈希查找)
前端·javascript·node.js
翻滚吧键盘33 分钟前
vue 条件渲染(v-if v-else-if v-else v-show)
前端·javascript·vue.js
vim怎么退出34 分钟前
万字长文带你了解微前端架构
前端·微服务·前端框架
你这个年龄怎么睡得着的34 分钟前
为什么 JavaScript 中 'str' 不是对象,却能调用方法?
前端·javascript·面试
Java水解37 分钟前
前端常用单位em/px/rem/vh/vm到底有什么区别?
前端
CAD老兵40 分钟前
Vite 如何借助 esbuild 实现极速 Dev Server 体验,并支持无 source map 的源码调试
前端
南屿im41 分钟前
JavaScript 手写实现防抖与节流:优化高频事件处理的利器
前端·javascript
Spider_Man41 分钟前
从零开始构建React天气应用:API集成与UI设计全指南 🌤️
前端·react.js
浩浩测试一下1 小时前
渗透信息收集- Web应用漏洞与指纹信息收集以及情报收集
android·前端·安全·web安全·网络安全·安全架构
西陵1 小时前
Nx带来极致的前端开发体验——借助CDD&TDD开发提效
前端·javascript·架构