如何在节点应用程序中指定环境变量?

时间:2018-10-27 17:06:29

标签: javascript node.js environment-variables

要指定env变量,有很多对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中分配我的var,如下所示:

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

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

2 个答案:

答案 0 :(得分:1)

  • 环境变量是在所有编程语言中配置程序行为的常用方法。大多数CI / CD工具都提供了开箱即用的支持,并且可以很好地与命令行配合使用。

  • 在您的示例中,您假设prd环境的完整配置将存储在该配置中,包括db密码等。在源代码中存储任何机密不被认为是安全的。 / p>

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

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

答案 1 :(得分:1)

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

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

使用适当的env变量和值来使您的环境更受欢迎。通常,最具战略性或特殊性的环境将受到保护,防止不必要的访问(生产,暂存等),因此您的秘密价值将无法获得。

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

这是一种简单但有效的方法,但要求对您的环境和主机的控制最小。