繁体   English   中英

如何在Node.js require()中的另一个模块中使用一个模块功能

[英]How to Use one module feature within another module in nodejs require()

我想在另一个模块中使用一个模块功能

文件main.js

var _ = require("./underscore.js");
var foo = require("./bar.js");
foo.publish(...);

文件bar.js

(function(e) {
    var array = [...];
    e.publish = function(t, args) {
        _.each(array, function(...) {...});
    });
})(exports);

我已经尝试了几种变体,但是我不确定解决此错误的最佳方法:

ReferenceError: _ is not defined

是的,对于您的示例,应该在每个需要该变量的模块中使用。

var _ = require("./underscore.js");

但是,如果您需要在多个模块之间转移一个对象实例,则可以使用流程对象使其成为全局对象。 但这是习惯。

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(...);

我希望你明白了。

您将结果分配给的变量是模块main.js的局部变量,因此您无法在bar.js中访问它。 相反,您还应该在bar.js中需要下划线模块。

您也可以在声明_时跳过var并将其设置为全局变量,但这带来了全局变量的所有问题,例如:

  • bar.js模块没有明确说明其依赖关系,因此很难理解它期望全局下划线。
  • 它需要特定的初始化顺序-如果以后再移动_ = require(underscore) ,则会再次得到未定义的错误,并且可能很难理解为什么;
  • 需要bar.js所有其他模块也需要underscore

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM