我想扩展当前的Node.js模块,只配置一次全局配置设置,而不会中断该模块的当前使用。
这是模块的签名:
const myFunction = function(someOptions) { ... };
module.exports = myFunction;
用途为
const myFunction = require('myfunction');
const result = myFunction(options);
现在,我想在应用程序启动时设置一些选项,使模块myfunction
在require
d时使用,而不中断模块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);
都会返回完全相同的函数对象。