如何在Node.js包中导出修改的原型?

我可以导出函数:

exports.foo = function() { return "bar"; }; 

我可以修改原型:

 Object.prototype.foo = function() { return "bar"; }; 

但后者只适用于Node解释器。 当我修改Node包内的原型然后require包时,Node忽略原型修改。 它抱怨Object.foo不存在。

由于你想要做的是monkeypatch Object让我们考虑正在做什么。 我将使用节点项目的joyent github页面中的一个例子,因为这是比较规范的,并且提供了一个比较可靠的例子,我们都同意“正确地工作”(如果它没有……好的话)

https://github.com/joyent/node/blob/master/lib/http2.js#L22

 var util = require('util'); var net = require('net'); var stream = require('stream'); var EventEmitter = require('events').EventEmitter; var FreeList = require('freelist').FreeList; var HTTPParser = process.binding('http_parser').HTTPParser; var assert = require('assert').ok; var parsers = new FreeList('parsers', 1000, function() { var parser = new HTTPParser('request'); parser.onMessageBegin = function() { parser.incoming = new IncomingMessage(parser.socket); parser.field = null; parser.value = null; }; 

我们在这个例子中看到的是一些需要的模块,它们被分配给variables。 那些已经结婚回来的Object原型。 我唯一能看到这样做的方法是在调用主体中有代码,这些代码需要遍历这些代码并将其应用到Object中。

换句话说,我能看到做你想做的事的唯一方法就是在你的应用的根目录下做你想做的事。 或者做一些与你想要合并的两个对象的结合,如果这是目标。

否则,你将原型增强限制在特定返回的variables中,而不是根对象。