Vite环境变量实现原理

Vite环境变量实现原理

_

这是Vite 的环境变量机制。原理:

1. Vite 如何区分环境

Vite 通过启动命令来区分:

  • npm run dev → 设置 import.meta.env.DEV = true

  • npm run build → 设置 import.meta.env.PROD = true

// Vite 内部实现(简化版)
const isDev = command === 'serve';  // dev 命令
const isProd = command === 'build'; // build 命令

// 注入到代码中的内置变量
import.meta.env.DEV = isDev;
import.meta.env.PROD = isProd;
import.meta.env.MODE = command;     // 'development' | 'production' 等

2. .env 文件加载优先级

Vite 按以下优先级加载环境变量(高的覆盖低的):

优先级

文件

何时加载

1

.env

所有环境

2

.env.local

所有环境(git 忽略)

3

.env.[mode]

特定 mode

4

.env.[mode].local

特定 mode(git 忽略)

例子:

  • 运行 npm run dev(mode = development):

    • 加载 .env.env.local.env.development.env.development.local

  • 运行 npm run build(mode = production):

    • 加载 .env.env.local.env.production.env.production.local

3. 变量注入到代码

Vite 在构建时会将 VITE_ 前缀的变量替换为实际值:

源代码:

const baseURL = import.meta.env.VITE_API_BASE;

开发环境运行时:

const baseURL = "http://175.178.59.129:8000";  // 直接替换

生产环境构建后:

const baseURL = "http://localhost:8000";  // 直接替换

4. package.json 中的配置

{
  "scripts": {
    "dev": "vite",           // 默认 mode = development
    "build": "vite build",   // 默认 mode = production
    "preview": "vite preview"
  }
}

你也可以自定义 mode:

"dev:test": "vite --mode test"  // 会加载 .env.test

总结

┌─────────────────────────────────────────────────────────────┐
│  npm run dev                                                 │
│       ↓                                                       │
│  import.meta.env.DEV = true                                  │
│  import.meta.env.MODE = "development"                        │
│       ↓                                                       │
│  加载 .env.development.local 中的 VITE_API_BASE             │
│       ↓                                                       │
│  替换为: "http://175.178.59.129:8000"                        │
└─────────────────────────────────────────────────────────────┘

┌─────────────────────────────────────────────────────────────┐
│  npm run build                                               │
│       ↓                                                       │
│  import.meta.env.PROD = true                                 │
│  import.meta.env.MODE = "production"                         │
│       ↓                                                       │
│  加载 .env.production 中的 VITE_API_BASE                    │
│       ↓                                                       │
│  替换为: "http://localhost:8000"                             │
└─────────────────────────────────────────────────────────────┘

注意: 只有 VITE_ 前缀的变量才会暴露给客户端代码,其他变量只在服务端可用(这是出于安全考虑)。

git回退版本 2026-02-25
Windows 下安装 Docker 完整指南 2026-02-24

评论区