之前写过一篇关于项目中 .env
,.env.development
,.env.local
等文件中变量优先级的文章, 当时还写了很多测试用例来测试,
今天看了下 dotenv 的源码, 以`vue-cli-server 的源码, 终于搞懂了
其实用户觉得复杂, 是因为 dotenv
的实现比较保守, 不会覆盖process.env
上已有的变量, 所以有时候我们显式写在.env
文件中的变量并不会生效, 再融入 vuecli
的 mode
以及 local
概念, 让变量更不容易追踪, 完全就是一个黑盒
重新实现了 y-dotenv 库
- 更改了优先级处理逻辑,使得黑盒变白盒,所见即所得
- 融入了
vuecli
的mode
,local
等概念,使得更贴近生产
新的策略: 合并.env, .env.[mode], .env.[mode].local
文件的变量,
遇到变量冲突时, 优先级从高到底依次为: .env.[mode].local
-> .env.[mode]
-> .env