项目复杂时,将vite.config.js文件拆分为三个分解然后在根据需求组合起来会更加优雅
vite.config.js
import { defineConfig } from "vite";
import viteBaseConfig from "./vite.base.config";
import viteDevConfig from "./vite.dev.config";
import viteProdConfig from "./vite.prod.config";
const mergerConfig = {
"serve": () =>{
console.log("开发环境")
return {...viteBaseConfig,...viteProdConfig}
},
"build": () =>{
console.log("生产环境")
return {...viteBaseConfig,...viteDevConfig}
}
}
export default defineConfig(({command}) =>{
return mergerConfig[command]()
})
这里的 defineConfig是vite提供的,方便在不同编辑器都可以享受到丝滑的配置代码提示函数。
下面的loadEnv是vite提供的读取环境变量的函数,通常接受三个参数
mode:这是一个字符串,表示当前的模式。通常,模式可以是development、production或其他自定义模式。Vite 会根据这个模式来加载相应的环境变量文件。root:这是一个字符串,表示项目的根目录。通常,你可以使用process.cwd()来获取当前工作目录,这样 Vite 就能在正确的位置查找环境变量文件。prefix:这是一个字符串,表示环境变量前缀。只有以这个前缀开头的环境变量才会被加载。通常,这个前缀是空字符串,表示加载所有环境变量。你也可以提供一个自定义前缀,比如VITE_,以只加载以VITE_开头的环境变量。
import { defineConfig, loadEnv } from "vite";
import viteBaseConfig from "./vite.base.config";
import viteDevConfig from "./vite.dev.config";
import viteProdConfig from "./vite.prod.config";
const mergerConfig = {
"serve": () =>{
console.log("开发环境")
return {...viteBaseConfig,...viteDevConfig}
},
"build": () =>{
console.log("生产环境")
return {...viteBaseConfig,...viteProdConfig}
}
}
export default defineConfig(({command,mode}) =>{
const env = loadEnv(mode,process.cwd(),"MB")
console.log(env)
return mergerConfig[command]()
})
它的工作原理是先找到.env文件,把其中的数据变成键值对储存在对象中,然后在.env后拼接上的 mode ,找到对应的环境变量文件,把数据变成键值对存储在对象中,注意!这里会覆盖.env的同名数据,举例如下
KEY = 120
MK = 9
MB = 666
LIU_KEY = 222
MK = 1
MV = 1
MB = 1
不进行过滤
打印结果如下
在客户端使用环境变量,直接通过import.meta.env就可以拿到
console.log(import.meta.env)
控制台中没有任何我们书写的环境变量,是因为出于安全考虑,vite不会让不以VITE为前缀的环境变量暴露在客户端
更改文件代码
LIU_KEY = 222
VITE_MK = 1
MV = 1
MB = 1
不想以VITE为前缀可以自己进行配置
envPrefix:"LIU"