如何处理Node.js中的循环依赖关系

如何处理Node.js中的循环依赖关系

我最近一直在使用NodeJS,并且仍然在处理模块系统,所以如果这是一个明显的问题,请原谅。我希望代码大致如下所示:

a.js(主文件与节点一起运行)

var ClassB = require("./b");var ClassA = function() {
    this.thing = new ClassB();
    this.property = 5;}var a = new ClassA();module.exports = a;

b.js

var a = require("./a");var ClassB = function() {}ClassB.prototype.doSomethingLater() {
    util.log(a.property);}module.exports = ClassB;

我的问题似乎是我无法从ClassB的实例中访问ClassA的实例。

是否有一种正确/更好的方式来构造模块以实现我想要的?是否有更好的方法在模块之间共享变量?


达令说
浏览 846回答 3
3回答

阿波罗的战车

虽然node.js允许循环require依赖关系,正如您已经发现的,它可以是很乱你最好把你的代码重组成不需要它。也许可以创建第三个类,使用其他两个类来完成所需的任务。

慕森卡

尝试将属性设置为module.exports而不是完全取代它。例如,module.exports.instance = new ClassA()在……里面a.js, module.exports.ClassB = ClassB在……里面b.js..创建循环模块依赖项时,所需模块将获得对不完整模块的引用。module.exports从所需的模块中,您可以在后面添加其他属性,但当您设置整个module.exports,您实际上创建了一个需要模块无法访问的新对象。

MYYA

我知道我在这里发现了一个旧的答案.。这里的问题是定义了module.export后你需要B级。循环依赖(JohnnyHK的链接显示)循环依赖在Node中非常有用,它们是同步定义的。如果使用得当,它们实际上解决了许多常见的节点问题(比如访问表达式.js)app其他文件)只需确保定义了所需的导出即可。以前您需要一个具有循环依赖关系的文件。这将破坏:var ClassA = function(){};var ClassB = require('classB'); //will require ClassA, which has no exports yetmodule.exports = ClassA;这将起作用:var ClassA = module.exports = function(){};var ClassB = require('classB');我一直使用这个模式来访问press.jsapp在其他档案中:var express = require('express');var app = module.exports = express();// load in other dependencies, which can now require this file and use app
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Node.js