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覆盖
}
相关推荐
meilindehuzi_a30 分钟前
Vue3组件样式隔离与组件通信实战:从 scoped、props 校验到记事本应用
前端·javascript·vue.js
LaughingZhu32 分钟前
Product Hunt 每日热榜 | 2026-07-28
前端·神经网络·react.js·搜索引擎·前端框架
陈随易8 小时前
在 VSCode 里,把项目一键部署到服务器
前端·后端·程序员
Highcharts.js8 小时前
教程:基于 React + Highcharts 构建一个单页应用程序、按需数据拉取与图表渲染
开发语言·前端·数据结构·react.js·前端框架·highcharts·页面应用
To_OC8 小时前
我被 useState 坑了两次之后,终于把它的脾气摸透了
前端·javascript·react.js
鱼樱前端8 小时前
我用 Claude Code 后,编码效率翻 3 倍。但更值钱的是别的。
前端·后端·ai编程
_lucas9 小时前
给知识库网站接入AI问答
前端·ai编程·全栈
前端糕手9 小时前
前端面试题大全:JavaScript + Vue3 + React + TypeScript + 工程化 + 性能优化
前端
我不叫武11 小时前
一个用 Rust 写的离线编码查询桌面工具
前端
Web4Browser11 小时前
指纹浏览器 API 自动化怎么接:启动 Profile、获取 CDP 端点并连接自动化框架
前端·网络·typescript·自动化