define 定义全局常量
define 选项用于在编译时注入全局常量,变量会被直接替换为字符串值。
基础用法
JavaScript
export default defineConfig({
define: {
__APP_VERSION__: '1.0.0',
__BUILD_TIME__: JSON.stringify(new Date().toISOString()),
__DEBUG__: false
}
})
代码中使用
JavaScript
// 代码中的变量会被替换
console.log(__APP_VERSION__) // 替换为 "1.0.0"
console.log(__BUILD_TIME__) // 替换为具体时间字符串
if (__DEBUG__) {
console.log('debug mode')
}
替换规则
JavaScript
// define 配置
define: {
VERSION: '1.0.0'
}
// 代码中
const v = VERSION
// 编译后
const v = "1.0.0"
注意:define 会直接替换变量为字符串,非字符串值需用 JSON.stringify。
与环境变量对比
| 对比项 | define | import.meta.env |
|---|---|---|
| 替换时机 | 编译时 | 运行时 |
| 命名规则 | 无限制 | VITE_ 前缀 |
| 类型支持 | 需手动序列化 | 字符串 |
| 适用场景 | 常量替换 | 配置值 |
TypeScript 类型声明
TypeScript
// vite-env.d.ts
declare const __APP_VERSION__: string
declare const __BUILD_TIME__: string
declare const __DEBUG__: boolean
常见使用场景
JavaScript
export default defineConfig({
define: {
__APP_VERSION__: JSON.stringify(process.env.npm_package_version),
__BUILD_MODE__: JSON.stringify(process.env.NODE_ENV),
__API_BASE__: JSON.stringify(process.env.VITE_API_BASE || '/api')
}
})
define 限制
- 不支持表达式计算
- 替换是静态字符串替换
- 对象和数组需 JSON.stringify
要点总结
- define 编译时替换变量为常量
- 非字符串值需 JSON.stringify
- TypeScript 需添加类型声明
- 适合版本号等固定信息注入
📝 发现内容有误?点击此处直接编辑