在我来到这里之前,我先检查了here。 我的问题与此有点不同。 我有以下文件夹结构。
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
如此处所示,我有一个全局和模块特定的配置文件。我想将它们合并到一个配置文件中并使用这种方式。
有没有办法轻松实现这一目标? (就像预先编写的模块一样)或者我应该遍历每个属性并覆盖是否存在相同的密钥?
答案 0 :(得分:0)
我写了一个位于https://github.com/quimsy/espresso下的模块,其中包含一个Config Tree Builder。它(部分)是Symfony的配置组件的端口。
您可以定义配置树:
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();
使用处理器您可以合并多个符合这些规则的配置:
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 ] );
查看Defining and Processing Configuration Values,因为这个模块是90%兼容的 - 一些不同的命名约定并且考虑到数组/对象(在PHP中只有数组类型)。