如何存储Node.js部署设置/配置文件?

我一直在研究一些Node应用程序,并且一直在寻找一种存储与部署相关的设置的良好模式。在Django世界(我来自哪里)中,通常的做法是先创建一个settings.py包含标准设置(时区等)的文件,然后创建一个local_settings.py用于部署特定设置的文件。与哪个数据库进行通信,什么Memcache套接字,管理员的电子邮件地址等等。

我一直在寻找Node的类似模式。只需一个配置文件就可以了,因此它不必与中的其他所有文件一起使用app.js,但是我发现,有一种方法可以在不在源代码控制中的文件中具有服务器特定的配置,这一点很重要。可以将同一应用程序很好地部署在具有不同设置的不同服务器之间,并且必须处理合并冲突,而这并不是我的乐趣。

那么,为此是否有某种框架/工具,或者每个人都只是自己一起破解一些东西?

小卤蛋卡卡西2020/03/16 11:22:09

长期以来,我一直使用这里解决方案中提到的方法。但是,对于明文秘密的安全性存在担忧。您可以在之上使用另一个软件包,config以便妥善处理安全位。

检查一下:https : //www.attosol.com/secure-application-secrets-using-masterkey-in-azure-key-vault/

Itachi老丝2020/03/16 11:22:09

我在这里尝试了一些建议的解决方案,但对它们不满意,因此我创建了自己的模块。称为mikro-config,主要区别是它遵循约定而不是配置,因此您只需要模块并开始使用它即可。

您可以将配置存储在纯js文件/config夹中的json文件中首先加载default.js文件,然后从/config目录加载所有其他文件,然后基于$NODE_ENV变量加载特定于环境的配置

它还允许重写此配置,以使用local.js或特定环境的本地开发/config/env/$NODE_ENV.local.js

您可以在这里查看:

https://www.npmjs.com/package/mikro-config

https://github.com/B4nan/mikro-config

ProTom2020/03/16 11:22:09

对于那些正在访问旧线程的人来说,这里是一个不错的软件包。

https://www.npmjs.org/package/config

猴子JinJin2020/03/16 11:22:09

您可以使用pconf:https ://www.npmjs.com/package/pconf

例:

var Config = require("pconf");
var testConfig = new Config("testConfig");
testConfig.onload = function(){

  testConfig.setValue("test", 1);
  testConfig.getValue("test");
  //testConfig.saveConfig(); Not needed

}
古一L2020/03/16 11:22:09

我刚刚发布了一个小模块,可以加载任何类型的配置文件。这非常简单,您可以在https://github.com/flesler/config-node上进行检查

Gil米亚卡卡西2020/03/16 11:22:09

除了nconf中模块中提到的这个答案,和节点配置中提到的这个答案,也有节点iniparserIniReader,这似乎是简单的.ini配置文件分析器。

Tom理查德2020/03/16 11:22:08

您可以将Konfig用于特定于环境的配置文件。它会自动加载json或yaml配置文件,具有默认值和动态配置功能。

Konfig回购中的一个示例:

File: config/app.json
----------------------------
{
    "default": {
        "port": 3000,
        "cache_assets": true,
        "secret_key": "7EHDWHD9W9UW9FBFB949394BWYFG8WE78F"
    },

    "development": {
        "cache_assets": false
    },

    "test": {
        "port": 3001
    },

    "staging": {
        "port": #{process.env.PORT},
        "secret_key": "3F8RRJR30UHERGUH8UERHGIUERHG3987GH8"
    },

    "production": {
        "port": #{process.env.PORT},
        "secret_key": "3F8RRJR30UHERGUH8UERHGIUERHG3987GH8"
    }
}

开发中:

> config.app.port
3000

在生产中,假设我们以 $ NODE_ENV=production PORT=4567 node app.js

> config.app.port
4567

更多详细信息:https : //github.com/vngrs/konfig

路易小卤蛋2020/03/16 11:22:08

您可能还希望使用node-config来加载配置文件,具体取决于$ HOST$ NODE_ENV变量(有点类似于RoR):documentation

这可以针对不同的部署设置(相当有用developmenttestproduction)。

老丝卡卡西西里2020/03/16 11:22:08

你们在使用npm启动脚本(env等)吗?

如果您使用.env文件,则可以将其包含在文件中,package.json 并使用npm来获取/启动文件。

例:

{
  "name": "server",
  "version": "0.0.1",
  "private": true,
  "scripts": {
    "start": "node test.js",
    "start-dev": "source dev.env; node test.js",
    "start-prod": "source prod.env; node test.js"
  },
  "dependencies": {
    "mysql": "*"
  }
}

然后运行npm脚本:

$ npm start-dev

它在这里描述https://gist.github.com/ericelliott/4152984 所有归功于Eric Elliot