在Node中使用环境变量

时间:2017-08-16 15:19:05

标签: node.js git environment-variables

我一直试图为本地和生产网络应用程序提供一种简化的方法来为不同的环境变量,但我还没有遇到过#34;理想的"解决方案。

可以选择使用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情况。

另外,如何最好推送到远程服务器?我有自己的服务器与Gulp任务运行在Git post-receive钩子上。如何最好将生产环境变量传递到这里?

由于

2 个答案:

答案 0 :(得分:0)

您是否考虑过使用带有.gitignore的keys.js文件?

我过去曾使用过这个来使用module.exports {}来使我的变量可用但不会为了安全方面的版本控制!

答案 1 :(得分:0)

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

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

要使用适当的配置文件,请使用必需的NODE_ENV

运行应用
NODE_ENV=production node index

environments/index.js确定当前NODE_ENV并使用config:

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

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

注意:

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

  

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