dotenv是否与十二因子应用程序相冲突?

我已经阅读了关于十二因子应用程序的configuration – 第三节,并在NodeJS中寻找方法。 似乎大多数人推荐dotenv将configuration存储在环境variables中。

但是,似乎dotenv与十二因子应用程序相矛盾,如下所示:

另一种configuration方法是使用configuration文件,这些configuration文件不会被检入版本控制,比如Rails中的config / database.yml。 与使用常量进行代码回购相比,这是一个巨大的进步,但仍然存在一些弱点:很容易错误地检查configuration文件到回购站; configuration文件分散在不同的地方和不同的格式,使得很难在一个地方看到和pipe理所有的configuration。 此外,这些格式往往是语言或框架的具体情况。

十二个因素的应用程序商店configuration在环境variables(通常缩写为env vars或env)。 环境variables很容易在不改变任何代码的情况下进行部署。 不像configuration文件,他们不小心被检入代码回购的机会很less; 与自定义configuration文件或其他configuration机制(如Java系统属性)不同,它们是与语言和操作系统无关的标准。

理解这个说法,似乎使用dotenv,你会创build一个configuration文件.env然后将它们作为环境variables导出。

这不会违反十二因子应用程序,因为.env文件可能会意外检查到代码回购?

直到有人实际提交并推送.env ; .env ;)

.env文件也可以存储在repo本身之外,因为库或应用程序仍然需要读取.env文件并将variables推送到环境中。 根据您的实施情况,这可以像更改从".env""../.env"的path一样简单。

使用.env文件可以是一个很好的折衷scheme,可以让开发人员轻松地pipe理环境,但仍然可以在部署期间与更好的环境实践兼容。 我可能会在虚拟机中运行30到40个12因素风格的应用程序,并且单独pipe理每个环境令人望而生畏,没有像.env这样的“垫片”。

大多数版本控制系统都有忽略某些文件的方法。

Git有.gitignore

SVN有“特别忽略”

另外,这些技术同样用于忽略node_modules目录,以避免不必要的复制文件。