【问题标题】:.env vs config.json.env 与 config.json
【发布时间】:2018-08-20 19:31:09
【问题描述】:

我刚开始学习 JavaScript / node.js(后端 webdev 的简单介绍),因此我对这门学科完全陌生。

几天前,我正在阅读一个教程,从中我学会了将我的机密数据(如密码)保存在 config.json 文件中。

今天我(偶然)发现了.env 文件,我越了解它,似乎就越有人用它来实际存储密码。

那么什么时候应该使用.env,什么时候应该使用config.json

【问题讨论】:

    标签: javascript node.js


    【解决方案1】:

    .env 文件通常用于存储与特定部署环境相关的信息,而config.json 文件可能用于存储整个应用程序的特定数据。

    任何一种方法都有效,您的配置文件是否存储在您的存储库中更多地取决于数据是否需要保密。

    【讨论】:

      【解决方案2】:

      问题

      什么时候应该使用.env 而不是config.json 以及用于什么目的?

      答案

      这是一个相当困难的答案。一方面,您应该只在开发过程中真正使用这些工具中的任何一个。这意味着在生产或类似产品的环境中,您可以将这些变量直接添加到环境中:

      NODE_ENV=development node ./sample.js --mongodb:host "dharma.mongohq.com" --mongodb:port 10065
      

      没有真正明显的赢家,因为它们都以不同的方式提供帮助。 config.json 可以嵌套数据,但另一方面,.env 也可以拥有更简洁的数据结构

      还有一点需要注意的是,您永远不想将这些文件提交到源代码控制(git、svc 等)。

      另一方面,这些工具让初学者很容易快速上手,而不必担心如何设置环境变量以及windows环境和linux环境的区别。

      总而言之,我想说这完全取决于开发人员。

      【讨论】:

        【解决方案3】:

        这在很大程度上取决于个人偏好和您使用的框架的约定。它们只是存储相同类型信息的不同格式。

        一些示例配置文件格式:

        • .env
        • *.yml(YAML 文件)
        • *.ini(通常仅限 Windows)
        • *.json

        归根结底,它们都实现了相同的目的:为您的应用程序提供特定于环境的信息(凭据、文件路径、连接字符串等)。选择最适合您选择的框架的格式。

        【讨论】:

          【解决方案4】:

          Statistically comparing the two NPM packages(以及其他类似的解决方案)可能是您自己决定的最佳方式。

          在撰写本文时,dotenv 是一个小得多的软件包,但支持更多(实际贡献者除外,仅由剩余问题的数量和巨大的受欢迎程度推断)。它也更新了 2.5 年,如果宣传对您很重要,它的明星数量是原来的两倍。

          【讨论】:

          • 大多数人不使用 config 包,而是使用 require 或 fs 将其加载到目录中并进行 json 解析
          【解决方案5】:

          我认为这完全取决于您,要记住的重要一点是您使用这种方法的原因。这个想法是将您的敏感数据保存在一个文件中,该文件不会被推送到源代码控制或本地环境以外的任何其他地方 - 这可以使数据更安全。然后,当您准备好部署到某处的远程服务器时,您需要手动将这些值插入到该环境中。

          我通常使用.env,因为从.env 文件获取数据的语法在许多远程环境(例如heroku)中都受支持。当我将应用程序部署到 heroku 时,我可以进入应用程序的设置并使用 heroku 仪表板 UI 输入环境变量 - 我不必弄清楚如何手动创建 json 文件等... (也许还有其他解决方法)。变量到位后,我只是使用process.env.variableName 来访问数据。

          【讨论】:

          • 此外,这些远程环境中的许多都提供命令行实用程序来将 .env 文件添加到此类环境。
          【解决方案6】:

          如果您的目标是在 Docker 中部署您的应用程序,那么 .env 是 100% 的选择。在config.json 中使用嵌套数据的能力非常棒,但是当您需要将这些数据迁移到.env 以使用 Docker 进行部署时,您将看到一些 PITA。 docker builddocker-compose 都被设计为在本机使用 .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
          

          【讨论】:

            【解决方案7】:

            我更喜欢 json,因为 typescript 可以从中推断出类型,这对于 env 文件是不可能的

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2021-10-26
              • 2020-11-10
              • 2018-08-30
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多