我想在另一个模块中使用一个模块功能
文件main.js
var _ = require("./underscore.js");
var foo = require("./bar.js");
foo.publish(...);
file bar.js
(function(e) {
var array = [...];
e.publish = function(t, args) {
_.each(array, function(...) {...});
});
})(exports);
我尝试了几种变体,但我不确定解决此错误的最佳方法:
ReferenceError: _ is not defined
答案 0 :(得分:3)
是的,你应该在每个需要该变量的模块中使用,例如你的情况。
var _ = require("./underscore.js");
但是如果您需要在多个模块之间传输一个对象实例,则可以使用 process 对象使其成为全局对象。但这是 BAD 练习。
process._ = require("./underscore.js");
在模块之间传递对象实例的好方法是将它们作为函数参数传递,但是您需要更改bar.js以返回工厂函数,而不是对象本身。
module.exports = function(_) {
var e = {};
var array = [...];
e.publish = function(t, args) {
_.each(array, function(...) {...});
});
return e;
}
在main.js中:
var _ = require("./underscore.js");
var foo = require("./bar.js")(_);
foo.publish(...);
我希望你明白这一点。
答案 1 :(得分:2)
您为其分配结果的变量是模块main.js的本地变量,因此您无法在bar.js中访问它。相反,您还应该在bar.js中使用下划线模块。
您还可以在声明var
时跳过_
并将其设为全局变量,但这会带来全局变量的所有问题,例如:
bar.js
模块没有明确其依赖关系,因此很难理解它希望全局需要下划线; _ = require(underscore)
,您将再次获得未定义的错误,并且可能很难理解为什么; bar.js
的每个其他模块都需要underscore
。