在不中断当前使用的情况下,使用全局配置扩展模块



我想扩展当前的Node.js模块,只配置一次全局配置设置,而不会中断该模块的当前使用。

这是模块的签名:

const myFunction = function(someOptions) { ... };
module.exports = myFunction;

用途为

const myFunction = require('myfunction');
const result = myFunction(options);

现在,我想在应用程序启动时设置一些选项,使模块myfunctionrequired时使用,而不中断模块myfunction的当前使用。

如果可能的话,我想避免使用Node.jsglobal

JavaScript中的函数只是对象,因此您可以为它们指定属性。这是一个技巧,但它肯定对你有用:

// greeter.js
function sayHello() {
const message = sayHello.message || "Hi";
console.log(message);
}
module.exports = sayHello;

您现在可以全局设置此函数的配置,如下所示:

const sayHello = require("./greeter.js");
sayHello.message = "S'up dawg";

在执行上述代码之后,任何后续对sayHello()的调用都将使用被覆盖的消息。这是因为对require()的调用是缓存的,所以每次require(./greeter.js);都会返回完全相同的函数对象。

最新更新