【问题标题】:How to specify env variables in node app?如何在节点应用程序中指定环境变量?
【发布时间】:2018-10-27 17:06:28
【问题描述】:

当您想指定环境变量时,可以使用很多对 dotenv 库的引用。但为什么?我可以在这样的文件中指定我的 var:

var dev = {
    
}

var prod = {
    
}

var config = null;

if (process.env.NODE_ENV === 'production') {
    config = prod
} else {
    config = dev
}

exports.config = config

并在npm srcipts 中分配我的变量,如下所示:

"scripts": {
    "start": "NODE_ENV=dev node bin/dev",
    "production": "NODE_ENV=production node bin/production"
}

我的方式不安全吗?为什么推荐使用 dotenv 方式?为什么我应该创建 .env 文件而不是我的 config.js?

【问题讨论】:

  • .dotEnv 也不安全。但这不是重点。您应该从您的 git 存储库中排除 .env,这样其他人就不会无意中看到您的值。然后,当您部署到服务器时,将其添加到服务器的环境文件中。
  • 是的,我同意!但我也可以用我的 config.js 文件做同样的事情。我可以从公共 .gitignore 这个文件,然后将其添加到部署流程......为什么 .dotEnv 如此流行?
  • 将环境变量保存在一起。使用 .js 文件很好,但迟早有人(团队可能会变大)最终会提交他们不应该提交的值。它通常对 API 密钥和 SECRET 更有用

标签: javascript node.js environment-variables


【解决方案1】:
  • 环境变量是配置程序行为的常用方法,适用于所有编程语言。它在大多数 CI/CD 工具中也得到开箱即用的支持,并且与命令行配合得非常好。

  • 在您的示例中,您假设 prd 环境的完整配置将存储在配置中,包括数据库密码等。在源代码中存储任何机密都是不安全的。

  • .env 文件是捆绑环境变量的常用实用程序。使用这种模式创建.gitignore 文件确实很容易,它可以防止它被提交,从而使配置保持在本地。请注意,包的使用者不必使用 .env 文件,但也可以在运行脚本的地方拥有全局/本地环境变量。开发扎实,不易出错。

  • 语法简单。而不是创建包含配置的临时源代码文件,其语法比key=value 更复杂,而且不太容易理解。

【讨论】:

    【解决方案2】:

    @Nastro,我会指出一些简单的不同方法。

    开发您的应用程序 100% 与环境无关。换句话说,请远离*远离版本控制文件您的代码或大量 if 为全局变量、会话属性等分配不同的值。

    使用适当的环境变量和值来支持您的环境。通常,最具战略意义或特殊的环境会受到保护,以防止不必要的访问(生产、登台等),因此您的秘密值将无法访问。

    单个db_password = process.env.DB_PASS 可重复用于您或您的团队创建的任何现有和未来环境。

    这是一种简单而有效的方法,但需要对您的环境和主机进行最低限度的控制。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-25
      • 2020-12-23
      • 1970-01-01
      • 1970-01-01
      • 2016-12-25
      相关资源
      最近更新 更多