前端获取环境变量方式区分(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 静态替换。

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

相关推荐
啃火龙果的兔子3 分钟前
前端直接渲染Markdown
前端
z-robot10 分钟前
Nginx 配置代理
前端
用户479492835691518 分钟前
Safari 中文输入法的诡异 Bug:为什么输入 @ 会变成 @@? ## 开头 做 @ 提及功能的时候,测试同学用 Safari 测出了个奇怪的问题
前端·javascript·浏览器
没有故事、有酒30 分钟前
Ajax介绍
前端·ajax·okhttp
朝新_33 分钟前
【SpringMVC】详解用户登录前后端交互流程:AJAX 异步通信与 Session 机制实战
前端·笔记·spring·ajax·交互·javaee
裴嘉靖36 分钟前
Vue 生成 PDF 完整教程
前端·vue.js·pdf
毕设小屋vx ylw28242638 分钟前
Java开发、Java Web应用、前端技术及Vue项目
java·前端·vue.js
冴羽2 小时前
今日苹果 App Store 前端源码泄露,赶紧 fork 一份看看
前端·javascript·typescript
蒜香拿铁2 小时前
Angular【router路由】
前端·javascript·angular.js
brzhang2 小时前
读懂 MiniMax Agent 的设计逻辑,然后我复刻了一个MiniMax Agent
前端·后端·架构