【问题标题】:Read environment variables in Node.js在 Node.js 中读取环境变量
【发布时间】:2018-03-09 05:48:24
【问题描述】:

有没有办法读取 Node.js 代码中的环境变量?

例如 Python 的 os.environ['HOME']

【问题讨论】:

    标签: javascript node.js environment-variables


    【解决方案1】:
    process.env.ENV_VARIABLE
    

    ENV_VARIABLE 是您要访问的变量的名称。

    Node.js docs for process.env

    【讨论】:

    • 请注意,这在节点进程及其子进程之外是不可见的。例如。如果您在节点进程运行时在另一个 shell 窗口中触发 env,则它不会可见,在节点进程退出后也不在同一个 shell 中。
    • 这也适用于分配变量。 process.env.FOO = "foo"; 工作。
    • 值得一提的是,这在 React 应用程序中不起作用。出于安全原因,process.env 已经过消毒。只有以REACT_ENV_ 开头的变量可用。见:github.com/facebookincubator/create-react-app/blob/master/…
    • @MarkEdington 我认为应该是REACT_APP_
    • @Mr.14 没错!这是 REACT_APP_ 而不是 REACT_ENV_
    【解决方案2】:

    使用Node.js时,可以从process.env对象中按键检索环境变量:

    例如

    var mode   = process.env.NODE_ENV;
    var apiKey = process.env.apiKey; // '42348901293989849243'
    

    这里是解释setting environment variables in node.js的答案

    【讨论】:

    • 使用上述process.env方法需要什么lib?
    • @user_mda process.env 内置在 node.js api 中。
    • 我只是在 process.env 上设置我想要的任何东西吗?为什么人们将它设置在那里而不是说一个由 node.js 要求()的配置对象?
    • process.env 使您可以访问在操作系统级别设置的环境变量。这些可以通过多种方式设置,具体取决于您在哪里部署应用程序。例如,我经常使用 NODE_ENV=development NODE_PATH=lib node server.js 运行我的本地应用程序。然后 process.env.NODE_PATH 将返回 'lib'
    【解决方案3】:

    如果您想使用在 Node.js 程序中生成的字符串键,例如 var v = 'HOME',您可以使用 process.env[v].

    否则,process.env.VARNAME 必须在您的程序中进行硬编码。

    【讨论】:

    • 你为什么有process.env['HOME']
    【解决方案4】:

    要在 Node.JS 中检索环境变量,您可以使用 process.env.VARIABLE_NAME,但不要忘记在 process.env 上分配属性会将值隐式转换为字符串。

    避免布尔逻辑

    即使您的 .env 文件定义了像 SHOULD_SEND=falseSHOULD_SEND=0 这样的变量,这些值也会被转换为字符串“false”和“0”)并且不被解释为布尔值。

    if (process.env.SHOULD_SEND) {
     mailer.send();
    } else {
      console.log("this won't be reached with values like false and 0");
    }
    

    相反,您应该进行明确的检查。我发现取决于环境名称有很长的路要走。

     db.connect({
      debug: process.env.NODE_ENV === 'development'
     });
    

    【讨论】:

    • 我喜欢对必须明确检查的布尔环境变量使用“是”和“否”。这避免了许多编程语言中的问题。
    【解决方案5】:

    您可以使用env 包来管理每个项目的环境变量:

    • 在项目目录下创建一个.env文件,把你所有的 变量。
    • 在应用程序入口文件的顶部添加这一行:
      require('dotenv').config();

    完成。现在您可以使用process.env.ENV_NAME 访问您的环境变量。

    【讨论】:

    • dotenv 包很有用,但是通过阅读 process.env.ENV_VARIABLE 可以回答问题。 dovenv 包是关于将设置从文件加载到环境中。
    • 这就是我的观点:从env 库管理和加载环境变量。
    • 您可以使用envdir 实用程序以非node.js 特定的方式执行相同操作。
    • 类似于github.com/bitrise-io/envman,也不是node-specific。
    • 这应该是答案。我只是在尝试使用process.env.MY_VAR,并且在我输入要求语句之前不会工作。谢谢!!
    【解决方案6】:

    如果您想在执行时查看所有环境变量,只需写入一些 nodejs 文件,例如 server.js:

    console.log(process.env);

    【讨论】:

      【解决方案7】:

      为什么不在 .bash_profile 文件的用户目录中使用它们,这样您就不必将任何带有变量的文件推送到生产环境中?

      【讨论】:

      • 原因是因为如果您使用.bash_profile,那么它将为该用户的环境设置它,但如果您在那里运行多个实例,那么您必须为此设置多个环境变量,而不是只有一个.例如。如果你设置了 PORT 变量,那么你必须让它像 PORT_1,...但是如果你通过 .env 使用它,那么你可以使用相同的代码和具有不同 PORT 号的 .env 文件。
      猜你喜欢
      • 1970-01-01
      • 2022-11-25
      • 1970-01-01
      • 2022-07-29
      • 1970-01-01
      • 2017-03-06
      • 2019-07-27
      • 1970-01-01
      相关资源
      最近更新 更多