极米投影仪
149.20M · 2026-03-22
先说结论:import.meta.env 更偏“现代前端构建工具(Vite)语义”,process.env 更偏“Node 语义(Webpack/Node 运行时)”。
在纯前端项目里,它们看起来都能“读环境变量”,但本质来源、注入时机、可见范围和迁移成本都不一样。
如果现在正在构建 Vue3/Vite 或 React/Vite 项目的话,优先用 import.meta.env;如果是 Webpack 老项目、Node 脚本或服务端代码,process.env 依然是主角。
import.meta.env 是什么?import.meta.env 是 ESM + Vite 提供的环境变量访问方式。它不是 Node 原生对象,而是由构建工具在开发/打包阶段注入。
MODE、DEV、PROD、BASE_URLVITE_),例如:VITE_API_BASE// .env.development
VITE_API_BASE=/api
VITE_APP_TITLE=Demo
// 业务代码
const baseURL = import.meta.env.VITE_API_BASE
const isDev = import.meta.env.DEV
process.env 是什么?process.env 是 Node.js 运行时里的环境变量对象。
在服务端(Node)代码中,它天然存在;在前端项目中能不能用,取决于打包器是否做了注入/替换(如 Webpack 的 DefinePlugin)。
process.env.NODE_ENV、process.env.VUE_APP_XXX// Vue CLI / Webpack 常见
if (process.env.NODE_ENV === 'production') {
// 生产逻辑
}
const baseURL = process.env.VUE_APP_BASE_API
下面这张表抓住最关键差异:
| 维度 | import.meta.env | process.env |
|---|---|---|
| 本质来源 | Vite/ESM 注入 | Node 运行时对象(或被打包器替换) |
| 典型生态 | Vite | Node / Webpack / Vue CLI |
| 前端可见变量前缀 | 默认 VITE_ | Vue CLI 常见 VUE_APP_ |
| 内置标识 | DEV/PROD/MODE | 常见 NODE_ENV |
| 类型体验 | 在 TS 中更容易做类型增强 | 常被视作 string | undefined |
| 迁移风险 | 旧项目需改写变量名与访问方式 | 在 Vite 前端中直接用可能报错或行为异常 |
Vite 写法:
const requestBaseURL = import.meta.env.VITE_API_BASE
Webpack/Vue CLI 写法:
const requestBaseURL = process.env.VUE_APP_BASE_API
Vite:
if (import.meta.env.DEV) {
console.log('dev log')
}
Webpack/Node:
if (process.env.NODE_ENV !== 'production') {
console.log('dev log')
}
很多人会直接把旧代码搬过来:
// 旧代码
const url = process.env.VUE_APP_BASE_API
在 Vite 前端中应改为:
const url = import.meta.env.VITE_API_BASE
并把 .env 变量从 VUE_APP_BASE_API 改成 VITE_API_BASE。
前后端变量分层
VITE_ 前缀process.env(Node 端),不要暴露给前端不要混用语义
import.meta.envprocess.env迁移时一次性改全
process.env.xxximport.meta.env 是“面向前端构建时”的环境注入接口,process.env 是“面向 Node 运行时”的环境变量接口。
它们都能“读配置”,但不在同一个语义层。把语义边界划清,项目会更稳定,迁移成本也会更低。
好啦!今天的知识点就分享到这里吧,希望读完对你的职业素养有一个质的提升。