向Node模块扩展或添加功能

时间:2014-07-01 19:20:08

标签: node.js

我想为我的项目要求添加几个异步包的方法..我不想更改aync的js文件。如何扩展Node模块以添加更多功能?

当我需要('myasync')时,我想要'async'模块的所有功能以及我添加的功能。

3 个答案:

答案 0 :(得分:11)

完成此操作的步骤如下:

  • 将模块的预定义功能作为您自己的变量
  • 修改,删除和/或向变量添加更多功能(通过Javascript的功能范例)
  • 将变量重新导出为您自己的变量,允许您require它(作为NPM模块或文件模块)。

首先,我们要求异步。

var newModule = require('async');

现在我们已经检索了模块async,我们可以附加我们自己的函数。

newModule.betterParallel = function(myParameters) { ... };

我们不仅可以添加自己的功能,而且甚至可以从模块中删除 - 因为它现在是我们自己的。

delete newModule['series'];

完成后,我们需要重新导出新模块。

module.exports = newModule;

如果要将此作为自己的模块发布到NPM,可以使用npm publish。如果你不想,你只需require这个文件 - 现在它包含你修改过的更改。

答案 1 :(得分:4)

// module that you like to extend
var async = require('async')

// add a new function, myOwnFunction, to the module
async.myOwnFunction = function () {
  // do something
}

// re-export the module, for the changes to take effect
module.exports = async

答案 2 :(得分:0)

如果该模块导出Object,我的个人喜好是:

import moduleToExtend from "moduleToExtend";

const myModule = {
    newFunction1: function () {
        // some new stuff
    },
    newFunction2: function () {
        // some new stuff
    },
};

module.exports = Object.assign(moduleToExtend, myModule);

来自docs

Object.assign()方法从以下位置复制所有可枚举的属性: 一个或多个源对象到目标对象。它返回目标 对象。