[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)
posted @   Zhentiw  阅读(10)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源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
点击右上角即可分享
微信分享提示