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覆盖
}
相关推荐
阿古达木2 分钟前
沉浸式改 bug,步步深入
前端·javascript·github
stoneSkySpace11 分钟前
react 自定义状态管理库
前端·react.js·前端框架
堕落年代24 分钟前
SpringAI1.0的MCPServer自动暴露Tool
前端
南囝coding40 分钟前
一篇文章带你了解清楚,Google Cloud 引发全球互联网服务大面积故障问题
前端·后端
Humbunklung1 小时前
DeepSeek辅助写一个Vue3页面
前端·javascript·vue.js
摸鱼仙人~1 小时前
ESLint从入门到实战
前端
CodeSheep1 小时前
稚晖君公司再获新投资,yyds!
前端·后端·程序员
知否技术1 小时前
放弃ECharts!3行代码DataV搞定Vue酷炫大屏,效率飙升300%!
前端·数据可视化
悟能不能悟1 小时前
Redis的GEO详解
前端·redis·bootstrap