gpt4 book ai didi

javascript - node.js 全局配置

转载 作者:搜寻专家 更新时间:2023-10-31 22:43:42 25 4
gpt4 key购买 nike

我目前正在开发一个小型控制台项目,该项目在很大程度上取决于最初传递的参数,我正在寻找一种在 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,则不应发生日志记录

记录器.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 为我做的模块缓存?有没有更好的方法来处理动态全局配置?

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

最佳答案

是的,这只是因为缓存才起作用,尽管我不称其为缓存(但 node.js 文档称其为缓存)而不是惰性初始化。靠那个就可以了,很多模块先做一些require的初始化,用它来配置也很典型。一般来说,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
}

它使代码更加解耦和可测试,但增加了复杂性。这两种方法之间的区别基本上与使用全局变量和依赖注入(inject)相同。使用任何你喜欢的东西。

关于javascript - node.js 全局配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20080377/

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