在nodev4
-
让我们说我有2个图书馆:foo
和bar
foo
有此
var bar = require('./lib/bar');
exports = module.exports = function myApp(options) {
[snip]
}
exports bar = bar;
和bar
有此
module.exports = function doStuff(moreOptions) {
function doMoreStuff () {
}
}
我的应用
x = requires(foo);
我想做的是将我的应用程序发送到monkeypatch doMoreStuff
函数 - 这可能吗?
我尝试过各种各样的图书馆,但我怀疑我对js的理解存在根本问题;)
答案 0 :(得分:0)
让我们看看你在这里有什么。之后
x = requires(foo);
你有以下基本上
x = function (options){ /* function work */ }
x.bar = function(moreOptions){
function doMoreStuff(){
}
}
这虽然不是非法的'这很奇怪。
相当于a = function() { return "I'm a function"; }
a.bar = "I'm a string attached to a function";
console.log(a()); // => "I'm a function"
console.log(a.bar); // => "I'm a string attached to a function"
你的酒吧模块做得不多。它是一个包含无法访问功能的函数。假设你的意思是
module.exports = function(moreOptions){
return {
doMoreStuff: function(){
return "Bar doing more stuff";
}
}
}
如果您想要新建一个myApp并附加外部功能,那么
function myApp(options){
}
myApp.prototype.bar = bar(); // since you exported a function
module.exports = myApp;
在您的主应用程序中,您现在可以
x = require('foo');
var app = new foo(); // you MUST otherwise you get an empty function
app.bar.doMoreStuff(); // => "Bar doing more stuff"
另外(并且不太容易出错)foo可能是
var bar = require('bar');
module.exports = function (options) {
// work here ...
return {
bar: bar(), // again, exported as function
appOptions: options,
// ...
}
}
然后在主模块中
x = require('foo');
x.bar.doMoreStuff(); // => "Bar doing more stuff";
希望这有帮助。