使用全局配置扩展模块而不会中断当前使用

时间:2019-01-05 14:29:53

标签: node.js

我想扩展当前的Node.js模块,使其具有一些全局配置设置,而不会破坏该模块的当前用法。

这是模块的签名:

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

用法是

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

现在,我想在myfunction被使用时在模块require上使用一些启动应用程序的选项,而不会破坏模块myfunction的当前用法。

如果可能,我要避免使用Node.js global

1 个答案:

答案 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);都返回完全相同的功能对象。