在我来这里之前,我先检查了这里。我的问题与此略有不同。我有以下文件夹结构。
- 应用.js
- global.config.js
- 节点模块
- 我的模块
- 模块配置.js
- 索引.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
索引.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
如图所示,我有一个全局和模块特定的配置文件。我想将它们合并到一个配置文件中并以这种方式使用。
有什么方法可以轻松实现这一目标吗?(就像一个预先编写的模块)还是我应该循环访问每个属性并覆盖是否存在相同的键?
我写了一个位于 https://github.com/quimsy/espresso 下的模块,其中包含一个配置树生成器。它(部分)是Symfony的Config Component的端口。
您可以定义配置树:
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 ] );
查看定义和处理配置值,因为此模块 90% 兼容 - 一些不同的命名约定并考虑数组/对象(在 PHP 中只有数组类型)。