有分层的node.jsconfiguration文件
我来之前先在这里查过 我的问题与此有点不同。 我有以下文件夹结构。
- app.js
- global.config.js
- 节点模块
- 我的模块
- module.config.js
- index.js
- 我的模块
global.config.js:
var config = {}; config.loggingLevel: "error"; // global setting for all custom modules
module.config.js:
var config = {}; config.loggingLevel: "info"; // ideally should override global setting
index.js
var globalDir = path.dirname(require.main.filename) + "\\global.config.js"; var globalConfig = require(globalDir); var moduleConfig = require("./module.config.js"); // merge configs here and use only one config object
如在这里看到的,我有一个全局和模块特定的configuration文件。 我想将它们合并成一个configuration文件,并以这种方式使用。
有什么办法可以轻松实现吗? (就像一个预先编写的模块)或者我应该迭代通过每个属性和重写,如果相同的密钥存在?
我写了一个位于https://github.com/quimsy/espresso的模块,其中包含一个configuration树生成器。 它(部分)是Symfony的configuration组件的一个端口。
您可以定义一个configuration树:
var TreeBuilder = require("Espresso/Config/Definition/Builder/TreeBuilder"); var builder = new TreeBuilder(); var root = builder.root("connection"); root .children() .scalarNode("host").defaultValue("localhost").end() .end();
和处理器你可以合并多个configuration尊重这些规则:
var Processor = require("Espresso/Config/Definition/Processor"); var processor = new Processor(); var mergedConfiguration = processor.process( root.getNode(), [ config1, config2 ] );
关于上面的例子,你会做这样的事情:
var builder = new (require("Espresso/Config/Definition/Builder/TreeBuilder")(); var root = builder.root("myConfigRoot"); /* some definitions */ var processor = new (require("Espresso/Config/Definition/Processor"))(); var config = processor.process( root.getNode(), [ globalConfig, moduleConfig ] );
看看定义和处理configuration值 ,因为这个模块是90%兼容的 – 一些不同的命名约定,并考虑到arrays/对象(在PHP中只有数组types)。