vite 中全局常量通过 define 配置实现编译期静态替换,支持字符串、数字、布尔等 json 可序列化类型,需手动 json.stringify(),不可用函数或动态值,构建后直接替换成字面量。

在 Vite 中配置全局常量,本质是构建时的静态文本替换,不是运行时变量。它速度快、无运行时开销,适合版本号、环境标识、API 基地址等固定值。
使用 define 配置对象注入常量
在 vite.config.ts 或 vite.config.js 的 define 选项中传入一个键值对对象:
- 键名推荐用全大写加双下划线前缀,比如 __APP_VERSION__ 或 __API_BASE_URL__,避免与全局变量冲突,也利于 IDE 识别
- 值必须是 JSON 可序列化的类型:字符串、数字、布尔、null,或嵌套的对象/数组;不能是函数、正则、undefined、Symbol
- 字符串值需手动 JSON.stringify(),否则会被当作变量名而非字面量
示例:
define: {
__APP_VERSION__: JSON.stringify(process.env.npm_package_version),
__IS_PRODUCTION__: JSON.stringify(process.env.NODE_ENV === 'production'),
__FEATURE_FLAGS__: JSON.stringify({ auth: true, analytics: false })
}
在代码中直接使用这些常量
注入后,可在任意模块中像普通全局变量一样访问:
- 不需要 import,也不走模块系统
- 构建时被原地替换成对应 JSON 字符串,例如
console.log(__APP_VERSION__)最终变成console.log("1.2.0") - 支持类型提示(需在 env.d.ts 中声明):
// env.d.ts declare const __APP_VERSION__: string; declare const __IS_PRODUCTION__: boolean;
常见用途与注意事项
典型场景包括:
- 注入当前 npm 包版本:
__APP_VERSION__: JSON.stringify(process.env.npm_package_version) - 模拟 Node.js 的
process.env(浏览器里没有该对象):'process.env': {},防止报错 - 区分开发/生产行为:
__DEBUG__: JSON.stringify(!isProduction)
注意点:
- 它不是
import.meta.env—— 后者是运行时读取的环境变量,由 Vite 注入为全局对象属性;define是纯编译期替换 - 不要试图在
define中传入动态计算结果(如new Date()),因为构建时只执行一次,且不支持非 JSON 类型 - 若需在不同模式(dev/prod)下注入不同值,可用配置函数形式:
export default defineConfig(({ mode }) => { ... }),再通过loadEnv(mode, process.cwd(), '')获取对应环境变量
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











