繁体   English   中英

你如何解决节点中的循环依赖问题

[英]How do you fix this circular dependency issue in node

` 我收到诸如 Type variable is undefined 和 getLastUnknownAlbumTrackNumber is not a function 这样的错误

我安装了madge来检查循环依赖,但我不知道如何解决它们

以下是来自 Madge 的madge

const madge = require('madge');

madge('./server.js').then((res) => {
    console.log(res.circular());
});

OUTPUT:
(node:6960) Warning: Accessing non-existent property 'getLastUnknownAlbumTrackNumber' of module exports inside circular dependency
(node:6960) Warning: Accessing non-existent property 'Type' of module exports inside circular dependency
[
[ 'jobs/index.js', 'models/index.js' ],
[ 'models/index.js', 'services/metadata.js' ]
]

以下是相关进出口

工作/index.js

const { getMovieMetaData, getTVShowMetaData, getAlbumMetaData } = require('../models');
...
module.exports = { getAll, upsertAll, getLastUnknownAlbumTrackNumber }

服务/metadata.js

const { Type } = require('../models');
...
module.exports = Metadata

模型/index.js

const { getLastUnknownAlbumTrackNumber } = require('../jobs');
const metadataServiceConstructor = require('../services/metadata');
const metadataService = new metadataServiceConstructor()
...
module.exports = { Type, getMovieMetaData, getTVShowMetaData, getAlbumMetaData }

你期望发生什么? 尝试解决循环导入会导致无限递归。

即使你用这个工具检查循环导入,也不是 static 分析,所以代码还是要运行,所以你遇到了同样的问题。

作为旁注,你为什么要使用这个工具? 很明显循环导入在哪里。 您需要重构以避免这种情况。

乍一看,这个答案似乎有点神秘
这是由于cyclic dependency的性质。

一旦你理解了它,修复你的解决方案也会很容易

问题:

1.js -> 2.js -> 3.js
                3.js -> 4.js -> 2.js ( `cycle` )

有效的解决方案:

1.js -> 2.js `(remove connection)`
               3.js -> 4.js -> 2.js
1.js -> `200.js (add new)` -> 3.JS

暂无
暂无

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

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