vite vue 环境变量 .env 文件

.env 环境配置文件

一 .env 文件的基本规则

  1. 命名规则
    • .env - 所有环境都会加载
    • .env.local - 所有环境都会加载,但会被git忽略
    • .env.[mode] - 只在指定模式下加载 (如 .env.production)
    • .env.[mode].local - 只在指定模式下加载,且被git忽略
  2. 优先级
    • 指定模式的.env文件 > 通用.env文件
    • 本地(.local)文件 > 非本地文件

二、如何判断当前环境

1. 通过命令行参数决定环境

package.json中,通过--mode参数指定环境:

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

2. 获取环境变量

在代码中可以通过import.meta.env访问环境变量:

javascript 复制代码
// 判断当前环境
if (import.meta.env.MODE === 'development') {
  console.log('开发环境')
} else if (import.meta.env.MODE === 'production') {
  console.log('生产环境')
}
// 访问自定义环境变量
const apiUrl = import.meta.env.VITE_APP_BASE_API

3. 自动加载机制

Vite会根据当前运行模式自动加载对应的.env文件:

  • vitevite dev → 默认使用 .env.development
  • vite build → 默认使用 .env.production
  • 使用 --mode 指定时 → 使用对应的 .env.[mode]

三、在vite.config.js中使用

javascript 复制代码
import { defineConfig, loadEnv } from 'vite'

export default defineConfig(({ mode }) => {
  // 1 'mode'=加载环境变量,'process.cwd()'=表示项目根目录
  const env = loadEnv(mode, process.cwd())
  
  // 2 现在可以通过env访问变量
  console.log(env.VITE_APP_BASE_API)
  
  return {
    // 配置...
  }
})

四、在项目中使用

所有以VITE_开头的变量会被注入到import.meta.env中:

javascript 复制代码
// 1 直接访问
const baseUrl = import.meta.env.VITE_APP_BASE_API

// 2 条件判断
if (import.meta.env.VITE_BUILD_TARGET === 'electron') {
  // Electron特有逻辑
}

五 项目中如何配置

1 .env 文件覆盖机制

对于 vite build --mode production.web 命令:

  1. .env - 所有环境共享的基础配置
  2. .env.production - 生产环境通用配置
  3. .env.production.web - Web生产环境特有配置

📌 覆盖规则:后加载的文件会覆盖前面文件的同名变量。

2 实际加载示例

1. .env (基础)
ini 复制代码
VITE_APP_TITLE=OK Factura
VITE_API_TIMEOUT=5000
2. .env.production (生产通用)
ini 复制代码
VITE_APP_ENV=production
VITE_API_TIMEOUT=8000  # 覆盖.env中的值
3. .env.production.web (Web生产)
ini 复制代码
VITE_BUILD_TARGET=web
VITE_APP_BASE_API=/prod-api
VITE_API_TIMEOUT=10000  # 覆盖前两个文件的值
▶️ 最终生效的环境变量:
arduino 复制代码
{
  VITE_APP_TITLE: 'OK Factura',       // 来自.env
  VITE_APP_ENV: 'production',         // 来自.env.production
  VITE_BUILD_TARGET: 'web',           // 来自.env.production.web
  VITE_APP_BASE_API: '/prod-api',     // 来自.env.production.web
  VITE_API_TIMEOUT: '10000'           // 最终被.env.production.web覆盖
}
相关推荐
小兵张健10 小时前
价值1000的 AI 工作流:Codex 通用前端协作模式
前端·aigc·ai编程
sunny_10 小时前
面试踩大坑!同一段 Node.js 代码,CJS 和 ESM 的执行顺序居然是反的?!99% 的人都答错了
前端·面试·node.js
拉不动的猪10 小时前
移动端调试工具VConsole初始化时的加载阻塞问题
前端·javascript·微信小程序
ayqy贾杰12 小时前
Agent First Engineering
前端·vue.js·面试
IT_陈寒12 小时前
SpringBoot实战:5个让你的API性能翻倍的隐藏技巧
前端·人工智能·后端
iceiceiceice13 小时前
iOS PDF阅读器段评实现:如何从 PDFSelection 精准还原一个自然段
前端·人工智能·ios
大金乄13 小时前
封装一个vue2的elementUI 表格组件(包含表格编辑以及多级表头)
前端·javascript
葡萄城技术团队14 小时前
【性能优化篇】面对万行数据也不卡顿?揭秘协同服务器的“片段机制 (Fragments)”
前端
程序员阿峰14 小时前
2026前端必备:TensorFlow.js,浏览器里的AI引擎,不写Python也能玩转智能
前端
Jans14 小时前
Shipfe — Rust 写的前端静态部署工具:一条命令上线 + 零停机 + 可回滚 + 自动清理
前端