之前写过一篇关于项目中 .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