停止硬码, 开始中央化 我们都去过那里:坐在一个随机文件的顶端。
然后有人把它推向生产, 和应用程序开始说话 中继。
或者更糟的是,你有10个文件分散在微服务处,它们的名称略有不同。
这简直是一场噩梦 干净的方法是将环境配置视为一等关注:将其集中,验证,并通过打出,一致的界面访问.
以下是我在Node.js中的做法,图案翻译为任何语言.
核心原理:一个地方,一个真理 所有环境变量都应该被装入一个模块,被转换成结构化对象,然后导出.
其他文件不应直接读取。
这使得您有一个地方可以添加默认,验证类型,并记录可用的内容.
第1步:装入和剖析第一,我用来装入一个正在开发的文件(从未承诺,但确实承诺a.).
然后,我读变量 明智的默认。
注意电话 环境变量总是字符串,所以在此转换为数字可以防止后期出错.
另外,我正在将相关的设置组合成被嵌入的物体,这样可以保持导出干净.
第2步:验证 Early, Fail Fast 缺少所需的变量应在启动时崩溃应用程序,而不是在请求中途崩溃.
我使用一个微小的验证功能 或像图书馆。
这里的人工检查是容易读取的: 如果你想采取更公开的做法 那就太好了 它会给你类型,默认, 和验证在一个镜头。
步骤 3: 在您的 App Now 中使用配置服务, 而不是在任何地方导入, 您导入您的配置对象 。
例如,在Express app中:在数据库客户端中: 这让你的代码也可以测试。
在测试中,你可以用模拟物体来覆盖, 不需要乱搞.
第4步:保持"代码外的秘密" 永远不要像API密钥或密码那样的硬密码秘密.
使用环境变量,并用于生产,使用在运行时将其注入环境的秘密管理器(AWS Secrets Manager,Vault等).
你的配置模块不关心它们来自哪里; 它只是读取它们。
步骤 5: 带有文件的文档让其他开发者知道要设置什么 。
包含每个变量的注释。
其他语言呢?
同样的模式随处可见。
在Python语中,使用或.
在去,使用或.
该思想是普遍的:集中,验证,并暴露出一个被打入的配置对象.
报应 不再有魔法线散落在密码库 如果缺少所需的配置, 启动失败 。
通过嘲笑配置模块来方便测试.
登机更简单 清楚。
这是一笔小投资,每次部署到新环境或调试配置问题都会有所回报.
你的未来会谢谢你的 进一步阅读Node.js dotenv文档 MDN:环境变量(一般概念) 快乐配置!