[Tools] Vite环境变量
https://cn.vitejs.dev/guide/env-and-mode#env-variables-and-modes
添加额外的环境变量
.env
#标题
VITE_APP_TITLE='Vite App'
#端口
VITE_PORT=5173
#是否自动打开浏览器
VITE_OPEN=true
.env.development
#开发环境端口
VITE_PORT=8848
#是否删除console打印日志
VITE_DROP_CONSOLE=false
.env.production
#是否删除console打印日志
VITE_DROP_CONSOLE=true
在Node环境中读取ENV
Vite提供loadEnv,可以读取指定的或者所有的环境变量;
默认时VITE_前缀,你也可以修改, 通过envPrefix: https://cn.vitejs.dev/config/shared-options.html#envprefix
vite.config.ts
import { defineConfig, ConfigEnv, UserConfig, loadEnv } from 'vite'
import { wrapperEnv } from './build/getEnv.ts'
export default defineConfig(({command, mode}: ConfigEnv):UserConfig => {
const root = process.cwd();
// 默认读取node环境变量
// console.log(process.env)
// mode 表示当前情景 root表示项目根路径,'' 表示前缀,''默认读取所有的环境变量
const env = loadEnv(mode, root, 'VITE_')
console.log(env);
const viteEnv = wrapperEnv(env);
return {
root,
server: {
port:viteEnv.VITE_PORT,
open:viteEnv.VITE_OPEN
},
esbuild: {
pure:viteEnv.VITE_DROP_CONSOLE ? ['console.log','debugger'] : []
}
}
})
build/getEnv.ts
type Recordable<T = any> = Record<string, T>;
export function wrapperEnv(envConfig: Recordable):ViteEnv {
const ret: any = {};
for (const envName of Object.keys(envConfig)) {
let realName = envConfig[envName].replace(/\\n/g, '\n');
realName = realName === 'true' ? true : realName === 'false' ? false : realName;
if (envName === 'VITE_PORT') {
realName = Number(realName);
}
ret[envName] = realName;
}
return ret;
}
src/vite-env.d.ts
https://cn.vitejs.dev/guide/env-and-mode.html#intellisense
declare interface ViteEnv {
VITE_APP_TITLE: string
VITE_PORT: number
VITE_OPEN: boolean
VITE_DROP_CONSOLE: boolean
}
//定义映射类型,将属性设置为只读
type ReadonlyProps<T> = {
readonly [P in keyof T]: T[P]
}
interface ImportMetaEnv extends ReadonlyProps<ViteEnv>{
}
interface ImportMeta {
readonly env: ImportMetaEnv
}
在浏览器环境中使用ENV
console.log(import.meta.env.VITE_APP_TITLE)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
2024-02-05 [Performance] Memory pool
2023-02-05 [Node.js] Migration with Umzug
2023-02-05 [Node.js] Fetch csv data and parse
2023-02-05 [Express] Add error handling middleware for express
2023-02-05 [Utils] Create a logger helper
2023-02-05 [CLI] Github workflow
2023-02-05 [Postgres Bash] Wait for database