我一直在尝试为Node的文件系统模块添加一些便利功能(主要是因为它缺少一些常识性的东西),但每次我在repl中开始fs.prototype.myfunc =
时,Node抱怨我正在尝试设置未定义变量的属性。您是否真的无法从外部访问Node的内置模块原型?如果是这样,有没有人知道扩展Node的内置模块的可行解决方法?
请注意:在尝试原型之前我确实需要fs!
var fs = require('fs');
fs.prototype.myfunc = function() {}; //TypeError thrown here
答案 0 :(得分:6)
您回复需求('')取决于特定模块。一些模块执行此操作:
module.exports = function() {}
在这种情况下,返回的值将是函数,因此可以附加原型的原型。
其他模块只在已存在的exports.module对象上设置值。 E.g:
module.exports.someFunc = function(){}
其中module.exports基本上只是:
module.exports = {}
对于fs模块,他们执行后者:
var fs = exports;
....
fs.readFileSync = function(path, encoding) {
因为返回的对象不是函数,所以你得到了错误。如果你这样做,你会得到同样的错误:
var x = {};
x.prototype.myfunc = function(){}
请注意,您可以这样做:
var fs = require('fs');
fs.myFunc = function(){}
答案 1 :(得分:1)
答案 2 :(得分:1)
可能有一种解决方法,但节点通过不让您修补其模块来向您发送消息。在require('fs-monkeypatch')
中执行require('fs')
以获取额外功能令人困惑。只需在fs模块之外添加您的功能。