Appearance
Vite 环境变量
Vite 提供了强大的环境变量管理功能,允许您在不同环境(开发、测试、生产等)中使用不同的配置和值。
环境变量基础
环境文件
Vite 会自动加载项目根目录下的环境文件:
.env:所有情况下都会加载.env.local:本地覆盖,通常被 git 忽略.env.development:开发环境(vite、vite serve).env.production:生产环境(vite build、vite preview).env.test:测试环境(vitest)
环境变量前缀
Vite 只会暴露以 VITE_ 为前缀的环境变量到客户端代码中:
text
# 可以在客户端代码中访问
VITE_API_URL=https://api.example.com
VITE_APP_TITLE=My App
VITE_VERSION=1.0.0
# 以下变量不会暴露到客户端
DB_PASSWORD=secret
API_KEY=private-key
使用环境变量
在客户端代码中使用
javascript
// 访问环境变量
const apiUrl = import.meta.env.VITE_API_URL
const appTitle = import.meta.env.VITE_APP_TITLE
console.log(`API URL: ${apiUrl}`)
console.log(`App Title: ${appTitle}`)
// 检查当前环境
if (import.meta.env.DEV) {
// 开发环境代码
console.log('Running in development mode')
}
if (import.meta.env.PROD) {
// 生产环境代码
console.log('Running in production mode')
}
// 检查模式
console.log('Current mode:', import.meta.env.MODE)
可用的内置环境变量
Vite 提供以下内置环境变量:
i:当前模式(development、production、test 等)mport.meta.env.MODE i:是否为开发环境(始终为布尔值)mport.meta.env.DEV i:是否为生产环境(始终为布尔值)mport.meta.env.PROD i:是否为服务端渲染(始终为布尔值)mport.meta.env.SSR
环境文件示例
开发环境文件
.env.development:
text
VITE_API_URL=http://localhost:3000/api
VITE_APP_ENV=development
VITE_DEBUG=true
生产环境文件
.env.production:
text
VITE_API_URL=https://api.myapp.com
VITE_APP_ENV=production
VITE_DEBUG=false
本地覆盖文件
.env.local(添加到 .gitignore):
text
VITE_API_URL=http://local-api:4000
VITE_APP_TITLE=My App (Local)
# 本地开发用的特殊配置
VITE_LOCAL_FEATURE=true
配置环境变量
自定义环境变量目录
javascript
// vite.config.js
export default {
envDir: './config' // 从 ./config 目录加载环境变量
}
这样 Vite 会从 ./config 目录而不是项目根目录加载环境文件。
模式配置
javascript
// vite.config.js
import { defineConfig } from 'vite'
export default defineConfig(({ mode }) => {
// 根据模式加载不同配置
const isDev = mode === 'development'
return {
define: {
// 在代码中定义全局常量
__IS_DEV__: isDev,
__API_URL__: JSON.stringify(
isDev ? 'http://localhost:3000' : 'https://api.example.com'
)
}
}
})
安全考虑
敏感信息处理
重要:永远不要在环境变量中存储敏感信息(如密码、API 密钥等),因为以 VITE_ 开头的变量会被嵌入到客户端代码中。
text
# ❌ 不安全 - 这些会被嵌入到客户端代码中
VITE_DB_PASSWORD=secret-password
VITE_PRIVATE_API_KEY=private-key
# ✅ 安全 - 这些不会暴露到客户端
DB_PASSWORD=secret-password
PRIVATE_API_KEY=private-key
服务端环境变量
对于敏感信息,应在服务端处理:
javascript
// server.js - 服务端代码
const express = require('express')
const app = express()
app.get('/api/config', (req, res) => {
// 从服务端环境变量获取敏感信息
const dbUrl = process.env.DB_URL
// 安全地处理请求
res.json({ status: 'ok' })
})
高级用法
条件环境变量
根据条件设置环境变量:
javascript
// vite.config.js
export default {
define: {
// 根据环境设置常量
'process.env.NODE_ENV ': JSON.stringify(process.env.NODE_ENV),
'__API_BASE_URL__': JSON.stringify(
process.env.NODE_ENV === 'production'
? 'https://api.example.com'
: 'http://localhost:3000'
)
}
}
运行时环境变量
javascript
// utils/config.js
const config = {
apiUrl: import.meta.env.VITE_API_URL || 'https://api.example.com',
title: import.meta.env.VITE_APP_TITLE || 'Default Title',
debug: import.meta.env.VITE_DEBUG === 'true',
version: import.meta.env.VITE_VERSION || '1.0.0'
}
export default config
环境变量验证
javascript
// utils/env-validator.js
const requiredEnvVars = [
'VITE_API_URL',
'VITE_APP_TITLE'
]
const missingEnvVars = requiredEnvVars.filter(
envVar => !import.meta.env[envVar]
)
if (missingEnvVars.length > 0) {
console.warn('Missing required environment variables:', missingEnvVars)
}
模式和环境
定义自定义模式
除了默认的 development 和 production 模式,您可以定义自定义模式:
bash
# 使用自定义模式
npm run dev -- --mode staging
创建对应的环境文件:
.env.staging.env.staging.local
.env.staging:
text
VITE_API_URL=https://staging-api.example.com
VITE_APP_ENV=staging
VITE_DEBUG=true
模式特定配置
javascript
// vite.config.js
import { defineConfig } from 'vite'
export default defineConfig(({ mode }) => {
let envConfig = {}
switch (mode) {
case 'development':
envConfig = {
VITE_API_URL: 'http://localhost:3000',
VITE_DEBUG: 'true'
}
break
case 'staging':
envConfig = {
VITE_API_URL: 'https://staging-api.example.com',
VITE_DEBUG: 'true'
}
break
case 'production':
envConfig = {
VITE_API_URL: 'https://api.example.com',
VITE_DEBUG: 'false'
}
break
}
return {
define: {
...Object.keys(envConfig).reduce((acc, key) => {
acc[key] = JSON.stringify(envConfig[key])
return acc
}, {})
}
}
})
实际应用示例
API 配置
javascript
// config/api.js
const apiConfig = {
baseUrl: import.meta.env.VITE_API_URL,
timeout: parseInt(import.meta.env.VITE_API_TIMEOUT) || 10000,
retries: parseInt(import.meta.env.VITE_API_RETRIES) || 3,
debug: import.meta.env.VITE_DEBUG === 'true'
}
export default apiConfig
功能开关
javascript
// config/features.js
const features = {
newUI: import.meta.env.VITE_FEATURE_NEW_UI === 'true',
analytics: import.meta.env.VITE_FEATURE_ANALYTICS === 'true',
debugMode: import.meta.env.VITE_DEBUG === 'true'
}
export default features
在组件中使用
vue
<template>
<div>
<h1>{{ appTitle }}</h1>
<debug-panel v-if="debugMode" />
</div>
</template>
<script>
import config from '@/config/api'
import features from '@/config/features'
export default {
data() {
return {
appTitle: import.meta.env.VITE_APP_TITLE || 'Default App',
debugMode: features.debugMode
}
},
created() {
console.log('API Base URL:', config.baseUrl)
}
}
</script>
通过合理使用环境变量,您可以轻松管理不同环境下的配置,提高应用的灵活性和安全性。