繁体   English   中英

.env 与配置 json

[英].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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM