[英].env vs config.json
我刚开始学习JavaScript
/ node.js
(对后端 webdev 的简单介绍),因此我对这个主题完全陌生。
几天前,我正在阅读一个教程,从中我学会了将我的机密数据(如密码)保存在config.json
文件中。
今天我(偶然地)发现了.env
文件,而且我对它了解得越多,似乎越多的人使用它来实际存储密码。
那么什么时候应该使用.env
什么时候应该使用config.json
?
什么时候应该使用.env
而不是config.json
用于什么?
这是一个相当困难的答案。 一方面,在开发过程中,您应该只使用这些工具中的任何一种。 这意味着在生产或类似prod的环境中,您可以将这些变量直接添加到环境中:
NODE_ENV=development node ./sample.js --mongodb:host "dharma.mongohq.com" --mongodb:port 10065
另一方本身并没有真正明显的赢家,因为它们在不同方面都有帮助。 您可以使用config.json
嵌套数据,但另一方面,您也可以使用.env
更清晰的数据结构
还有一点需要注意的是,你永远不想将这些文件提交给源代码控制(git,svc等)。
另一方面,这些工具使初学者很容易快速入门,而不必担心如何设置环境变量以及Windows环境和Linux环境之间的差异。
总而言之,我要说它真的取决于开发人员。
这在很大程度上取决于个人偏好和您正在使用的框架的惯例。 它们只是用于存储相同类型信息的不同格式。
一些示例配置文件格式:
.env
*.yml
(YAML文件) *.ini
(通常仅限Windows) *.json
在一天结束时,它们都实现了相同的目的:为应用程序提供特定于环境的信息(凭据,文件路径,连接字符串等)。 选择最适合您选择框架的格式。
.env
文件通常用于存储与特定部署环境相关的信息,而config.json
文件可能用于存储特定于应用程序的数据。
这两种方法都有效,以及您的配置文件是否存储在您的存储库中更多的是数据是否需要保密。
我认为这取决于你,重要的是要记住你使用这种方法的原因。 我们的想法是将敏感数据保存在一个文件中,该文件不会被推送到源代码控制或本地环境以外的任何其他位置 - 这样可以使数据更安全。 然后,当您准备好在某处部署到远程服务器时,您需要手动将这些值插入该环境中。
我通常使用.env
因为在许多远程环境中都支持从.env
文件获取数据的语法 - 比如heroku。 当我将应用程序部署到heroku时,我可以进入应用程序的设置并使用heroku仪表板UI输入环境变量 - 我不必弄清楚如何手动创建json文件等等... (也许还有其他解决方法)。 在变量到位后,我只使用process.env.variableName
来访问数据。
我更喜欢 json 因为 typescript 可以从中推断类型,这对于 env 文件是不可能的
统计比较两个NPM包 (以及其他类似的解决方案)可能是自己决定的最佳方式。
在撰写本文时, dotenv是一个小得多的包,有更大的支持(除了实际的贡献者,只能通过剩余问题的数量和巨大的受欢迎程度来推断)。 它也更新了2。5年,如果宣传对你很重要,那么它的星数是它的两倍。
如果您的目标是在 Docker 中部署应用程序,那么.env
是 100% 的选择。 在config.json
使用嵌套数据的能力很棒,但是当您需要将该数据迁移到.env
以使用 Docker 进行部署时,您将需要查看一些 PITA。 docker build
和.env
docker-compose
都被设计为.env
本机使用.env
,所以如果你从它开始,那么它将有助于“Dockerizing”你的应用程序的顺利路径。
我目前正在移植一个应用程序以在 Docker 中运行,该应用程序没有这样的先见之明,这非常痛苦......大量重构,仅适用于嵌套的东西。 基本的key:value
属性很容易迁移到.env
:
~$ cat config.json
{
"PROTOCOL": "https",
"HOST": "example.com",
"PORT": 443
}
...
~$ cat .env
PROTOCOL="https"
HOST="example.com"
PORT=443
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.