Vite 环境变量主要是为了区分开发、测试、生产等环境的变量
参考:
- Vite 环境变量配置官方文档
- vite 环境变量
# 1.env 配置文件
项目根目录新建 .env.development
、 .env.production
以 VITE_ 为前缀定义变量
开发环境变量配置:
.env.development
# 变量必须以 VITE_ 为前缀才能暴露给外部读取
VITE_APP_TITLE = 'vue3-element-admin'
VITE_APP_PORT = 3000
VITE_APP_BASE_API = '/dev-api'
生产环境变量配置:
.env.production
VITE_APP_TITLE = 'vue3-element-admin'
VITE_APP_PORT = 3000
VITE_APP_BASE_API = '/prod-api'
# 2. 环境变量智能提示
新建 src/types/env.d.ts
文件存放环境变量 TS 类型声明
// src/types/env.d.ts | |
interface ImportMetaEnv { | |
/** | |
* 应用标题 | |
*/ | |
VITE_APP_TITLE: string; | |
/** | |
* 应用端口 | |
*/ | |
VITE_APP_PORT: number; | |
/** | |
* API 基础路径 (反向代理) | |
*/ | |
VITE_APP_BASE_API: string; | |
} | |
interface ImportMeta { | |
readonly env: ImportMetaEnv; | |
} |
默认情况下,Vite 在
vite/client.d.ts
中为import.meta.env
提供了类型定义。随着在.env[mode]
文件中自定义了越来越多的环境变量,你可能想要在代码中获取这些以VITE_
为前缀的用户自定义环境变量的 TypeScript 智能提示。要想做到这一点,你可以在src
目录下创建一个vite-env.d.ts
文件 (vite 项目初始化时默认创建了),接着按下面这样增加ImportMetaEnv
的定义:
/// <reference types="vite/client" />
interface ImportMetaEnv { readonly VITE_APP_TITLE: string; // 网站标题 readonly VITE_APP_BASE_API: string; // 接口前缀 readonly VITE_BASE_PATH: string; // 打包路径 readonly VITE_DROP_DEBUGGER: string; // 是否删除 debugger readonly VITE_DROP_CONSOLE: string; // 是否删除 console.log readonly VITE_SOURCEMAP: string; // 是否 sourcemap readonly VITE_OUT_DIR: string; // 输出路径// 更多环境变量...
}
interface ImportMeta { readonly env: ImportMetaEnv;}
对应
.env.development
和.env.production
# 环境
NODE_ENV=production# 接口前缀
VITE_APP_BASE_API=dev# 打包路径
VITE_BASE_PATH=/dist-dev/# 是否删除 debugger
VITE_DROP_DEBUGGER=false# 是否删除 console.log
VITE_DROP_CONSOLE=false# 是否 sourcemap
VITE_SOURCEMAP=true# 输出路径
VITE_OUT_DIR=dist-dev# 标题
VITE_APP_TITLE=ElementAdmin
使用自定义环境变量就会有智能提示,环境变量的读取和使用请看跨域处理中的 vite.config.ts
的配置。
# 3. 使用变量
import.meta.env.VITE_BASE_URL |
# 4. 在 vite.config.ts 中使用环境变量
使用 loadEnv
读取环境变量
import { defineConfig, loadEnv } from 'vite' | |
// 1. 写法一 | |
export default defineConfig(({ command, mode }) => { | |
// 根据当前工作目录中的 `mode` 加载 .env 文件 | |
// 设置第三个参数为 '' 来加载所有环境变量,而不管是否有 `VITE_` 前缀。 | |
const env = loadEnv(mode, process.cwd(), '') | |
return { | |
//vite 配置 | |
define: { | |
__APP_ENV__: JSON.stringify(env.APP_ENV), | |
}, | |
} | |
}) | |
//or 2. 写法 2 | |
export default ({ mode }) => { | |
console.log('mode', loadEnv(mode, process.cwd()).VITE_BASE_URL); //127.0.0.1:9000/api | |
return defineConfig({ | |
//... | |
}) | |
} |
# 5.HTML 环境变量替换
<h1>Vite is running in %MODE%</h1> | |
<p>Using data from %VITE_API_URL%</p> |
- 如果环境变量在
import.meta.env
中不存在,比如不存在的%NON_EXISTENT%
,则会将被忽略而不被替换- 这与 JS 中的
import.meta.env.NON_EXISTENT
不同,JS 中会被替换为undefined
# 6. 配置多环境
vite 默认只有开发环境与生产环境,对于实际开发来说,显然是不够的,比如还需要测试环境 test。
"scripts": { | |
"test":"vite --mode test", // 新增 | |
}, |
使用 yarn test 启动命令,读取.env 与 .env.test 的内容