vite官方提供了一个defineConfig工具函数进行基本的打包配置,但是在defineConfig中,其实是有隐藏参数存在的,比如command, mode, ssrBuild,今天具体说一下这个mode:
mode其实就是为了当前打包的方式,来引入不同的环境变量,现在我们打印一下这个mode究竟是什么:
当我们启动项目的时候,运行 npm run dev,然后查看控制台:
然后我们打包项目,运行 npm run build,再次查看控制台:
这下大家可以理解这个mode是什么了吧,我们可以根据这个mode加载不同的环境变量。
我们先创建两个文件.env.development和.env.production
然后分别在文件中,设置两个同名变量
.env.development
# 发布路径
VITE_PUBLIC_PATH=/
.env.production
# 发布路径
VITE_PUBLIC_PATH=/abc
然后我们回到配置文件,通过vite提供的loadEnv来获取环境变量,加上如下代码:
然后我们再次打包查看
npm run dev
npm run build
这样就可以针对开发环境、生产环境进行区分配置打包了。
这里产生了一个问题,为什么运行npm run dev的时候,就会打包.env.development文件,运行npm run build的时候就会打包.env.production文件呢?
原来vite是使用的dotenv,从环境目录中的下列文件夹加载额外的环境变量:
另外:为了防止意外地将一些环境变量泄露到客户端,只有以 VITE_ 为前缀的变量才会暴露给经过 vite 处理的代码,这是默认情况,而我们使用的const ev = loadEnv(mode,process.cwd(),''),第三个参数传空,就可以不用考虑是否以VITE_ 为前缀,所有变量都可以使用。