Vue import.meta.env 讲解

好,这个问题问得非常到位 👍

我直接把 import.meta.env 里"分别是啥" 给你一项一项拆开讲,不绕弯子。


一、一句话总览

ts 复制代码
import.meta.env

👉 Vite 注入给前端的环境变量集合对象

它由 两部分组成

  1. Vite 内置变量
  2. 你自己在 .env* 里定义的 VITE_ 变量

二、Vite 内置的(必有)

这些不用你配,Vite 自动给。

1️⃣ import.meta.env.MODE

ts 复制代码
import.meta.env.MODE
含义
development 开发
production 生产
test 测试

📌 等价于你启动时的 --mode


2️⃣ import.meta.env.DEV

ts 复制代码
import.meta.env.DEV
  • true:开发环境
  • false:非开发

等价于:

ts 复制代码
import.meta.env.MODE === 'development'

3️⃣ import.meta.env.PROD

ts 复制代码
import.meta.env.PROD
  • true:生产环境
  • false:非生产

4️⃣ import.meta.env.BASE_URL

ts 复制代码
import.meta.env.BASE_URL

👉 对应 vite.config.js 里的:

ts 复制代码
export default defineConfig({
  base: '/'
})

常用于:

  • 静态资源路径
  • 子路径部署

三、你自己定义的(VITE_ 开头)

来自 .env 文件。

示例 .env.development

env 复制代码
VITE_APP_BASE_API=http://localhost:8080
VITE_APP_ENV=development

5️⃣ import.meta.env.VITE_APP_BASE_API

ts 复制代码
import.meta.env.VITE_APP_BASE_API

👉 后端接口地址

你项目里最常用的那个:

ts 复制代码
axios.defaults.baseURL = import.meta.env.VITE_APP_BASE_API

6️⃣ import.meta.env.VITE_APP_ENV

ts 复制代码
import.meta.env.VITE_APP_ENV

一般用来做业务环境判断

ts 复制代码
if (import.meta.env.VITE_APP_ENV === 'production') {
  // 生产逻辑
}

四、真实运行时 import.meta.env 长啥样?

你在浏览器里 console.log(import.meta.env),会看到类似:

js 复制代码
{
  BASE_URL: "/",
  MODE: "development",
  DEV: true,
  PROD: false,
  VITE_APP_BASE_API: "http://localhost:8080",
  VITE_APP_ENV: "development"
}

五、为什么有的变量你"拿不到"?

❌ 没有 VITE_ 前缀

env 复制代码
API_URL=http://localhost:8080
ts 复制代码
import.meta.env.API_URL // undefined

✅ 必须:

env 复制代码
VITE_API_URL=http://localhost:8080

六、⚠️ 常见误区(重点)

❌ 1️⃣ 改 .env 不重启

👉 必须重启 Vite


❌ 2️⃣ 当 Node 环境变量用

ts 复制代码
process.env.NODE_ENV // ❌ Vite 不推荐

✅ 用:

ts 复制代码
import.meta.env.MODE

❌ 3️⃣ 在非 Vite 项目用

ts 复制代码
import.meta.env // undefined

七、最重要的记忆口诀(送你)

内置看 MODE / DEV / PROD
自定义一定 VITE_


如果你愿意,我可以下一步直接帮你:

  • 对照你现在项目 逐个解释你已有的 env 变量
  • 帮你设计一套规范的 env 命名方案(前后端通用)

问题:import.meta.env.VITE_APP_BASE_API 我有.env.development .env.production .env.staging三个,那它应用的是哪个

这个问题非常关键 ,也是很多人对 Vite 最容易迷糊的点之一。

我直接给你 一句话结论 + 完整规则 + 你这个项目的实际情况


一、一句话结论(先记住)

import.meta.env.VITE_APP_BASE_API 用的是:
👉 当前启动时的 mode 对应的 .env.[mode] 文件


二、Vite 选择 .env 的完整规则(官方机制)

Vite 启动时会按 mode 加载这些文件(优先级从低到高):

复制代码
.env
.env.[mode]

并且 后加载的覆盖先加载的


例子:mode = development

加载顺序:

复制代码
.env
.env.development   ✅ 最终生效

mode = production

复制代码
.env
.env.production    ✅ 最终生效

mode = staging

复制代码
.env
.env.staging       ✅ 最终生效

三、关键点:mode 是谁决定的?

1️⃣ vite / npm run dev

bash 复制代码
vite

等价于:

bash 复制代码
vite --mode development

👉 默认 mode = development


2️⃣ vite build

bash 复制代码
vite build

等价于:

bash 复制代码
vite build --mode production

👉 默认 mode = production


3️⃣ 手动指定(你有 staging 的情况)

bash 复制代码
vite --mode staging
vite build --mode staging

四、你现在这个项目里实际生效的是哪个?

情况 1:你本地开发

bash 复制代码
npm run dev

👉 生效:.env.development

ts 复制代码
import.meta.env.VITE_APP_BASE_API
// 来自 .env.development

情况 2:你打生产包

bash 复制代码
npm run build

👉 生效:.env.production


情况 3:你要测试 / 预发布(staging)

bash 复制代码
vite build --mode staging

或 package.json:

json 复制代码
"scripts": {
  "build:staging": "vite build --mode staging"
}

👉 生效:.env.staging


五、如何 100% 确认当前用的是哪个?

方法 1:看 MODE

ts 复制代码
console.log(import.meta.env.MODE)

方法 2:每个 env 写不同值(推荐)

env 复制代码
# .env.development
VITE_APP_BASE_API=http://localhost:8080
env 复制代码
# .env.production
VITE_APP_BASE_API=https://api.prod.com
env 复制代码
# .env.staging
VITE_APP_BASE_API=https://api.staging.com

浏览器一看就知道。


六、⚠️ 非常容易踩的坑(重点)

❌ 1️⃣ 同时在 .env 里也写了

env 复制代码
# .env
VITE_APP_BASE_API=http://xxx

你会以为不生效,其实是被 .env.[mode] 覆盖了。


❌ 2️⃣ 改了 .env 不重启

👉 Vite 必须重启


❌ 3️⃣ 生产环境用错 mode

bash 复制代码
vite build --mode development ❌

七、给你一套"企业级推荐用法"

package.json

json 复制代码
{
  "scripts": {
    "dev": "vite",
    "build:dev": "vite build --mode development",
    "build:staging": "vite build --mode staging",
    "build:prod": "vite build --mode production"
  }
}

八、一句话总结(你一定要记住)

VITE_APP_BASE_API 用哪个?
👉 看你启动时的 mode
👉 mode 决定 .env.[mode]

如果你愿意,我可以下一步帮你:

  • 对照你现在的 package.json 判断你真实在用哪个 env
  • 帮你设计前后端统一的 dev / staging / prod 配置方案
相关推荐
我即将远走丶或许也能高飞12 分钟前
vuex 和 pinia 的学习使用
开发语言·前端·javascript
钟离墨笺34 分钟前
Go语言--2go基础-->基本数据类型
开发语言·前端·后端·golang
爱吃泡芙的小白白39 分钟前
Vue 3 核心原理与实战:从响应式到企业级应用
前端·javascript·vue.js
卓怡学长1 小时前
m115乐购游戏商城系统
java·前端·数据库·spring boot·spring·游戏
码上成长2 小时前
JavaScript 数组合并性能优化:扩展运算符 vs concat vs 循环 push
开发语言·javascript·ecmascript
老陈聊架构2 小时前
『AI辅助Skill』掌握三大AI设计Skill:前端独立完成产品设计全流程
前端·人工智能·claude·skill
油丶酸萝卜别吃2 小时前
Mapbox GL JS 表达式 (expression) 条件样式设置 完全指南
开发语言·javascript·ecmascript
Ulyanov2 小时前
从桌面到云端:构建Web三维战场指挥系统
开发语言·前端·python·tkinter·pyvista·gui开发
cypking2 小时前
二、前端Java后端对比指南
java·开发语言·前端
摘星编程2 小时前
用React Native开发OpenHarmony应用:timing定时动画参数
javascript·react native·react.js