gpt4 book ai didi

node.js - 具有分层的 Node.js 配置文件

转载 作者:太空宇宙 更新时间:2023-11-03 22:32:23 25 4
gpt4 key购买 nike

我检查了here在我来这里之前首先。我的问题与此略有不同。我有以下文件夹结构。

  • app.js
  • global.config.js
  • Node 模块
    • 我的模块
      • module.config.js
      • index.js

global.config.js:

var config = {};
config.loggingLevel: "error"; // global setting for all custom modules

模块.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

如此处所示,我有一个全局和模块特定的配置文件。我想将它们合并到一个配置文件中并以这种方式使用。

有什么办法可以轻松实现这一点吗? (就像预先编写的模块)或者我应该迭代每个属性并覆盖(如果存在相同的键)?

最佳答案

我编写了一个位于 https://github.com/quimsy/espresso 下的模块其中包含一个配置树生成器。它(部分)是 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 中只有数组类型)。

关于node.js - 具有分层的 Node.js 配置文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34797866/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com