我想扩展当前的Node.js模块,使其具有一些全局配置设置,而不会破坏该模块的当前用法。
这是模块的签名:
const myFunction = function(someOptions) { ... };
module.exports = myFunction;
用法是
const myFunction = require('myfunction');
const result = myFunction(options);
现在,我想在myfunction
被使用时在模块require
上使用一些启动应用程序的选项,而不会破坏模块myfunction
的当前用法。
如果可能,我要避免使用Node.js global
。
答案 0 :(得分:1)
JavaScript中的函数只是对象,因此您可以为其提供属性。这是一个小 hacky,但它肯定可以为您服务:
// 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()
的任何后续调用都将使用覆盖的消息。之所以有效,是因为calls to require()
are cached,因此每次require(./greeter.js);
都返回完全相同的功能对象。