我刚开始学习 JavaScript
/ node.js
(一个温和的后端网络开发入门),因此我在这个主题上完全没有经验。
几天前,我正在阅读一篇教程,从中学会了将我的机密数据(如密码)保存在 config.json
文件中。
今天我偶然发现了 .env
文件,越了解它,似乎就越有人使用它实际上存储密码。
那么我应该什么时候使用 .env
,什么时候使用 config.json
?
我刚开始学习 JavaScript
/ node.js
(一个温和的后端网络开发入门),因此我在这个主题上完全没有经验。
几天前,我正在阅读一篇教程,从中学会了将我的机密数据(如密码)保存在 config.json
文件中。
今天我偶然发现了 .env
文件,越了解它,似乎就越有人使用它实际上存储密码。
那么我应该什么时候使用 .env
,什么时候使用 config.json
?
在什么情况下应该使用.env
而不是config.json
?
这是一个相当困难的问题。一方面,你只应该在开发时真正使用这些工具。这意味着在生产或类似生产的环境中,你应该直接将这些变量添加到环境中:
NODE_ENV=development node ./sample.js --mongodb:host "dharma.mongohq.com" --mongodb:port 10065
就本身而言,两者都有其独特的用处,没有真正的胜者。你可以使用config.json
进行嵌套数据,但另一方面,.env
可以提供更清晰的数据结构。
需要注意的是,这些文件不应该提交到源代码控制(git、svc等)中。
另一方面,这些工具使初学者能够很容易地开始编程,无需担心如何设置环境变量以及Windows环境和Linux环境之间的差异。
总的来说,我认为这取决于开发者。
.env
文件通常用于存储与特定部署环境相关的信息,而 config.json
文件可能用于存储整个应用程序特定的数据。
两种方法都可以,您的配置文件是否存储在存储库中更多取决于数据是否需要保密。
.env
*.yml
(YAML 文件)*.ini
(通常仅限 Windows)*.json
我认为这完全取决于您,重要的是要记住使用这种方法的原因。这个想法是将敏感数据保存在一个不会被推送到源代码控制或任何其他地方而只存在于您本地环境的文件中-这样可以保证数据更加安全。然后,当你准备好部署到远程服务器时,你需要手动将这些值插入到该环境中。
通常我使用.env
文件,因为从.env
文件中获取数据的语法在许多远程环境中都有支持-比如heroku。当我将应用部署到heroku时,我可以进入应用的设置,并使用heroku dashboard UI输入环境变量-我不需要手动创建json文件等(也许有其他解决方法)。变量放置好后,我只需使用process.env.variableName
来访问数据。
统计比较这两个NPM包(以及其他类似的解决方案)可能是自己做决定的最佳方式。
在撰写本文时,dotenv 是一个更小的包,但具有更好的支持(除了实际贡献者之外,仅通过剩余问题的数量和巨大的流行度得出)。它也比另一个新约2.5年,如果对你来说声望很重要,它有两倍的星星数。
.env
绝对是最佳选择。在config.json
中使用嵌套数据的能力非常棒,但当您需要将该数据迁移到.env
以使其与Docker配合工作时,您将会遇到一些麻烦。docker build
和docker-compose
都是原生设计为使用.env
,因此如果您从这里开始,它将为“Dockerizing”您的应用程序提供平滑的路径。key:value
属性很容易迁移到.env
中:~$ cat config.json
{
"PROTOCOL": "https",
"HOST": "example.com",
"PORT": 443
}
...
~$ cat .env
PROTOCOL="https"
HOST="example.com"
PORT=443
我更喜欢使用JSON,因为TypeScript可以从中推断出类型,而在环境文件中则不行。
.env
需要一个 Node 包来读取,但 JSON 不需要。你有什么想法吗? - Movahhedi