import{defineConfig,loadEnv}from'vite'exportdefaultdefineConfig(({command,mode})=>{// Load env file based on `mode` in the current working directory.
// Set the third parameter to '' to load all env regardless of the `VITE_` prefix.
constenv=loadEnv(mode,process.cwd(),'')return{// vite config
define:{__APP_ENV__:env.APP_ENV}}})
源码路径 🔗
packages/vite/src/node/env.ts
默认会读取这4种类型的文件,都是以.env开头的, 其中后面的文件内容会覆盖前面的文件
1
2
3
4
5
6
constenvFiles=[/** mode local file */`.env.${mode}.local`,/** mode file */`.env.${mode}`,/** local file */`.env.local`,/** default file */`.env`]
for(constfileofenvFiles){constpath=lookupFile(envDir,[file],{pathOnly:true,rootDir:envDir})if(path){constparsed=dotenv.parse(fs.readFileSync(path),{debug:process.env.DEBUG?.includes('vite:dotenv')||undefined})// let environment variables use each other
dotenvExpand({parsed,// prevent process.env mutation
ignoreProcessEnv:true}asany)// only keys that start with prefix are exposed to client
for(const[key,value]ofObject.entries(parsed)){if(prefixes.some((prefix)=>key.startsWith(prefix))&&env[key]===undefined){env[key]=value}elseif(key==='NODE_ENV'&&process.env.VITE_USER_NODE_ENV===undefined){// NODE_ENV override in .env file
process.env.VITE_USER_NODE_ENV=value}}}}