node.js全局配置

时间:2013-11-19 19:30:12

标签: javascript node.js

我目前正在开发一个小型控制台项目,它很大程度上依赖于最初传递的参数,我正在寻找一种在nodejs中处理配置对象的好方法。

我的项目目前完全使用以下示例,但我认为在使用'require'时我正在继续使用模块的缓存。

让我们假设一个模块options.js

'use strict';

var options = {
    configName: '.jstail',
    colorActive: (process.platform === 'win32') ? false : true, // deactivate color by default on windows platform
    quiet: false,
    debug: false,
    config: null,
    logFile: null,
    setting: null
};

module.exports = options;

我的初始模块init.js

#!/usr/bin/env node
'use strict';

var options = require('options'); // require above options module

// modify the options object based on args

然后我有一个依赖于这个选项的记录器

例如,如果quiet设置为true,则不会发生日志记录

logger.js

'use strict';

var options = require('options');

/**
 * prints to console if not explicitly suppresed
 * @param {String} text
 */
function log(text) {
   if (!options.quiet) {
       console.log('[LOG]: ' + text);
   }
}

我的大问题是(我认为)当我在记录器中需要选项模块时,我正在继续缓存nodejs模块

所以我的两个问题是:

我是对的,这只能用于缓存nodejs为我做的模块吗? 有没有更好的方法来处理动态全局配置?

我知道配置文件有几个问题和教程,但这不是我想要的。

1 个答案:

答案 0 :(得分:5)

是的,这只能用于缓存,但我不会将其称为缓存(但是node.js文档可以),而不是延迟初始化。可以依赖它,很多模块会先做一些初始化需求,使用它进行配置也很典型。一般来说,require是一种访问全局单例对象的node.js方法。

另一种方法是从单个文件加载配置,修改它然后将其传递给需要它的其他模块,如下所示:

//index.js
var config = require('./config')

config.flag = false

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

//module1.js
module.exports = function (config) {
// do stuff
}

它使代码更加分离和可测试,但增加了复杂性。这两种方法之间的差异与使用全局和依赖注入基本相同。使用你喜欢的任何东西。