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

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

我一直在寻找类似的节点模式。 只是一个配置文件会很好,所以它不必与app.js中的所有其他东西卡在一起,但是我发现有一种方法可以在非源代码控制的文件中拥有特定于服务器的配置。 同样的应用程序可以很好地部署在不同的服务器上,具有非常不同的设置,并且必须处理合并冲突以及所有这些都不是我的乐趣。

那么是否有这样的框架/工具,还是每个人都只是自己在一起?


我为我的包使用package.json ,为我的配置使用config.js ,如下所示:

var config = {};

config.twitter = {};
config.redis = {};
config.web = {};

config.default_stuff =  ['red','green','blue','apple','yellow','orange','politics'];
config.twitter.user_name = process.env.TWITTER_USER || 'username';
config.twitter.password=  process.env.TWITTER_PASSWORD || 'password';
config.redis.uri = process.env.DUOSTACK_DB_REDIS;
config.redis.host = 'hostname';
config.redis.port = 6379;
config.web.port = process.env.WEB_PORT || 9980;

module.exports = config;

我从我的项目加载配置:

var config = require('./config');

然后我可以从config.db_hostconfig.db_port等访问我的东西......这让我可以使用硬编码参数或存储在环境变量中的参数(如果我不想在源代码管理中存储密码的话)。

我还生成一个package.json并插入一个依赖项部分:

"dependencies": {
  "cradle": "0.5.5",
  "jade": "0.10.4",
  "redis": "0.5.11",
  "socket.io": "0.6.16",
  "twitter-node": "0.0.2",
  "express": "2.2.0"
}

当我将项目克隆到本地机器时,我运行npm install来安装软件包。 更多信息在这里。

该项目存储在GitHub中,并为我的生产服务器添加了遥控器。


您可以从节点v0.5.x请求JSON文件(参考此答案)

config.json:

{
    "username" : "root",
    "password" : "foot"
}

app.js:

var config = require('./config.json');
log_in(config.username, config.password);

很久以后,我发现了一个非常好的用于管理配置的Node.js模块:nconf。

一个简单的例子:

var nconf = require('nconf');

// First consider commandline arguments and environment variables, respectively.
nconf.argv().env();

// Then load configuration from a designated file.
nconf.file({ file: 'config.json' });

// Provide default values for settings not provided above.
nconf.defaults({
    'http': {
        'port': 1337
    }
});

// Once this is in place, you can just use nconf.get to get your settings.
// So this would configure `myApp` to listen on port 1337 if the port
// has not been overridden by any of the three configuration inputs
// mentioned above.
myApp.listen(nconf.get('http:port'));

它还支持在Redis中存储设置,编写配置文件,并且具有相当稳定的API,并且还受到一个备受推崇的Node.js商店之一Nodejitsu作为Flatiron框架计划的一部分的支持,因此它应该是相当面向未来。

在Github上查看nconf。

链接地址: http://www.djcxy.com/p/58341.html

上一篇: How to store Node.js deployment settings/configuration files?

下一篇: C# Detect file moves trough different folders