你如何解决节点中的循环依赖问题
How do you fix this circular dependency issue in node
`
我收到错误,例如 Type variable is undefined 和 getLastUnknownAlbumTrackNumber is not a function
我安装了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 }
你希望发生什么?尝试解决循环导入会导致无限递归。
即使你用这个工具来检查循环导入,它也不是静态分析,所以代码仍然需要运行,所以你遇到同样的问题。
附带说明一下,您为什么要使用此工具?很明显循环导入在哪里。您需要重构以避免这种情况。
` 我收到错误,例如 Type variable is undefined 和 getLastUnknownAlbumTrackNumber is not a function
我安装了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 }
你希望发生什么?尝试解决循环导入会导致无限递归。
即使你用这个工具来检查循环导入,它也不是静态分析,所以代码仍然需要运行,所以你遇到同样的问题。
附带说明一下,您为什么要使用此工具?很明显循环导入在哪里。您需要重构以避免这种情况。