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覆盖
}
相关推荐
憧憬成为web高手2 小时前
ACTF 12307复现
前端·bootstrap·html
wordbaby3 小时前
Axios 上传大文件崩溃:鸿蒙 RNOH 下 XHR 返回空响应头引发的"假失败"
前端·react native
wordbaby3 小时前
React Native 列表分页实战:下拉刷新与上拉加载的工程化方案
前端·react native
wordbaby4 小时前
脱离 Tab 栏的艺术:React Native 全屏子页面的导航架构实践
前端·react native·harmonyos
陈随易4 小时前
Redis 8.8发布,一定要更新
前端·后端·程序员
wordbaby4 小时前
React Native 新架构落地鸿蒙:跨三端政务级应用的工程实践与深度复盘
前端·react native·harmonyos
excel6 小时前
为什么我推荐使用 Termius:现代 SSH 工具的完整体验
前端·后端
ZC跨境爬虫6 小时前
模块化烹饪小程序开发日记 Day7:(菜谱详情接口开发与JSON数据读取全流程)
前端·javascript·css·ui·微信小程序·json
এ慕ོ冬℘゜6 小时前
JS 前端基础面试题
开发语言·前端·javascript
LaughingZhu6 小时前
Product Hunt 每日热榜 | 2026-05-25
前端·人工智能·经验分享·chatgpt·html