[英]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.