对nodejs表示混淆.env / config文件设置

时间:2018-03-10 15:42:08

标签: node.js express configuration config sequelize-cli

我有2个问题,我在一起问两个问题,因为它们彼此相关。

我正在使用sequelize-cli进行迁移,(之前我使用了sync({force:true}))

当我使用命令

sequelize init

创建了config / config.json,并且该json文件以键值对,开发/测试/生产的方式构建。

// like below

{
    "development": {

    },
    "test": {

    },
    "production": {

    }
}

在使用sequelize migration之前,我不知道开发,测试,制作的概念,因此我搜索了有关这些概念的文章。

因此,我了解到建议将NODE_ENV设置为开发或生产(或测试)。

我的问题从这里开始。

首先,我以前只使用.env文件,在该文件中设置了变量(在使用sequelize migration之前,我没有使用config文件夹的经验。我只使用.env文件。)

因为这是我第一次使用config.js文件,所以无法区分.env文件和配置文件之间的角色。

所以,在阅读时,

How to store Node.js deployment settings/configuration files?

我在配置文件中看到了process.env.something(使用.env文件中设置的变量)。

下面是代码,

//config.js

config.twitter.user_name = process.env.TWITTER_USER || 'username';
config.twitter.password=  process.env.TWITTER_PASSWORD || 'password';

所以第一个问题是.env文件只设置了一些秘密变量,而配置文件使用了.env文件(带有process.env。),因此我的express应用程序的所有设置最终都在配置中文件吗

我对分配配置文件和.env文件的结构感到困惑。

我也阅读了文章

https://goenning.net/2016/05/13/how-i-manage-application-configuration-with-nodejs/

根据那篇文章,

config文件夹中有development.js,production.js,test.js文件。

但正如我上面提到的,从命令" sequelize init"创建的config.json文件具有键值对。 (开发,测试,生产)。

反之亦然,上面的文章显示config文件夹中包含用于开发,测试,生产的文件。

所以我的第二个问题是,我是否必须删除从" sequelize init"创建的config.json文件?命令,并将它们集成到每个文件? (可能没有100%正确答案,但我想知道最广泛使用和最有效的方式)

从现在开始,我甚至不知道如何设置NODE_ENV,但我会继续搜索它。

感谢您阅读这个长期的问题,非常感谢您就此问题给我一些建议。

1 个答案:

答案 0 :(得分:1)

该文件(config)是将使用的实际配置文件。该文件恰好从env中提取了一些值。这使您不必在不同服务器上拥有项目时自行更改配置文件。您可以在每个主机上放置一个不同的.env文件,指定其唯一值。

想象一下,你正在与其他人合作。他们将为其数据库配置不同的配置。必须将值硬编码到提交到存储库的配置文件中会导致一些问题,因为它们会降低其配置可能会被覆盖的更改。 .env文件未提交,不应该是“主机”的唯一。

通过让配置文件从env中提取值,每个人(主机)都可以拥有自己的.env文件及其自己的值,而无需更改实际的配置文件。

我从这里找到:https://laravel.io/forum/05-28-2016-env-file-vs-configdatabasephp

这个答案不只适用于PHP,而且所有语言都适用于这个概念之王。