【问题标题】:Using environment variables in Node在 Node 中使用环境变量
【发布时间】:2018-01-24 19:44:01
【问题描述】:

我一直在尝试为本地和生产网络应用程序提供不同环境变量的简化方法,但我还没有遇到“理想”的解决方案。

有一个像这样的 config.js 文件的选项:

//config.js
{
    "secretKey": "SDFDASFFSFD",
    "facebook": {
        "clientID": "EFGFDGBGDGFS",
        "clientSecret": "EGDFNHFG"
    }
}

通过 ES6 导入访问

或者像这样使用 .env 文件:

SOME_KEY=someValue
HELLO=world
FACEBOOK_SECRET=435SDFSF5DZVD7S

并使用 dotenv 在代码中通过 process.env 访问变量。

显然,无论您走哪条路线,都需要从版本控制中省略该文件,这很好。这些方法中的每一种都很棒,但它们似乎只对本地发展有效。

那么,如何为生产环境创建一个单独的文件? dotenv 文档说他们强烈建议不要使用 .local.env 和 .prod.env 情况。

另外,如何最好地推送到远程服务器?我有自己的服务器,其中包含在 Git 接收后挂钩上运行的 Gulp 任务。如何最好将生产环境变量传递到这里?

谢谢

【问题讨论】:

    标签: node.js git environment-variables


    【解决方案1】:

    您可以为每个环境拥有自己的配置文件:

    - environments
      - index.js
      - deveplopment.json
      - staging.json
      - production.json
    

    要使用适当的配置文件,请使用所需的NODE_ENV 运行应用程序:

    NODE_ENV=production node index
    

    environments/index.js 中确定当前的NODE_ENV 并使用配置:

    process.env.NODE_ENV = process.env.NODE_ENV || 'development';
    module.exports = require('./' + process.env.NODE_ENV);
    

    如果配置文件不包含机密信息(apiKeys 等),则可以将其推送到 repo。否则将其添加到 .gitignore 并在服务器上使用环境变量。

    注意:

    对于高级配置,请使用 nconf 等软件包。

    它允许创建带有文件、环境变量、命令行参数和原子对象合并的分层 node.js 配置。

    【讨论】:

    • 我明白了——这完全有道理。我的配置文件的想法是它们确实包含敏感数据,那么使用导出变量是什么意思?感谢您的快速回复!
    • 我的意思是环境变量
    • 好的,那么如何将环境变量传到服务器呢?
    • 你可以通过process.env阅读它们:$ MYVAR=somevalue node index,然后通过它的名字访问它:console.log(process.env.MYVAR);。或者使用nconf 模块。
    【解决方案2】:

    您是否考虑过创建一个带有 .gitignore 的 keys.js 文件?

    我过去曾使用它来使用 module.exports{} 来使我的变量可用,但不会出于安全方面的考虑而进行版本控制!

    【讨论】:

    • 这对本地开发很有好处,但是你的代码的本地版本和生产版本之间的数据库凭据可能会有所不同,那么如何将生产变量推送到生产系统呢?感谢您的快速回复:)
    • 您不会通过版本控制系统推送它们,而是在部署应用程序时在生产服务器上编辑配置文件。
    猜你喜欢
    • 2019-08-24
    • 1970-01-01
    • 2020-11-30
    • 2020-03-06
    • 2013-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-14
    相关资源
    最近更新 更多