`我收到了一些错误,比如Type变量未定义,getLastUnknownAlbumTrackNumber不是函数
我安装了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' ]
]
以下是相关进口&出口
jobs/index.js
const { getMovieMetaData, getTVShowMetaData, getAlbumMetaData } = require('../models');
...
module.exports = { getAll, upsertAll, getLastUnknownAlbumTrackNumber }
services/metadata.js
const { Type } = require('../models');
...
module.exports = Metadata
models/index.js
const { getLastUnknownAlbumTrackNumber } = require('../jobs');
const metadataServiceConstructor = require('../services/metadata');
const metadataService = new metadataServiceConstructor()
...
module.exports = { Type, getMovieMetaData, getTVShowMetaData, getAlbumMetaData }
您预计会发生什么?试图解析循环导入会导致无限递归。
即使您使用此工具来检查循环导入,它也不是静态分析,因此代码仍然需要运行,因此您会遇到同样的问题。
顺便说一下,你为什么要使用这个工具?循环导入的位置很清楚。您需要重构以避免这种情况。
乍一看,这个答案可能有点神秘
这是由于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