dotenv 源码学习以及创建自己的 dotenv

278 阅读1分钟

之前写过一篇关于项目中 .env,.env.development,.env.local等文件中变量优先级的文章, 当时还写了很多测试用例来测试,

今天看了下 dotenv 的源码, 以`vue-cli-server 的源码, 终于搞懂了

其实用户觉得复杂, 是因为 dotenv 的实现比较保守, 不会覆盖process.env 上已有的变量, 所以有时候我们显式写在.env 文件中的变量并不会生效, 再融入 vueclimode 以及 local 概念, 让变量更不容易追踪, 完全就是一个黑盒

重新实现了 y-dotenv

  • 更改了优先级处理逻辑,使得黑盒变白盒,所见即所得
  • 融入了 vueclimode , local 等概念,使得更贴近生产

新的策略: 合并.env, .env.[mode], .env.[mode].local文件的变量, 遇到变量冲突时, 优先级从高到底依次为: .env.[mode].local -> .env.[mode] -> .env