我正在使用webpack + babel。我有三个模块看起来像这样:
void remdup() {
int *nSet;
for(int x=0;x<card-1;x++) {
for(int y=x+1;y<card;y++) {
if(Set[x]==Set[y]) {
for(int g=y;g<card-1;g++) {
Set[g]=Set[g+1];
} card--;
}
}
}
nSet=new int[card];
for( int u=0;u<card;u++) {
nSet[u]=Set[u];
}
delete Set;
Set=new int[card];
for(int u=0;u<card;u++) {<---
Set[u]=nSet[u];
}
执行// A.js
// some other imports here
console.log('A');
export default 'some-const';
// B.js
import someConst from './A';
console.log('B', someConst);
export default 'something-else';
// main.js
import someConst from './A';
import somethingElse from './B';
console.log('main', someConst);
时,我会看到以下内容:
main.js
如果我在B undefined
A
main some-const
中交换导入,main.js
成为第一个,我得到:
B
A
B some-const
main some-const
如何获得B.js
而不是第一个版本中的模块?怎么了?
答案 0 :(得分:143)
经过几乎整整一个工作日缩小问题(AKA拉毛)后,我终于意识到我有一个循环依赖。
如果undefined
显示,// some other imports here
会导入另一个模块A
,而模块C
会导入B
。 A
首先导入main.js
,因此B
最终成为&#34;圈&#34;和Webpack(或任何类似CommonJS的环境)中的最后一个链接问题,就像Node一样,只需通过返回A
module.exports
undefined
来使其短路,这仍是some-const
。最终,它等于B
,但undefined
中的同步代码最终会处理C
。
通过移出B
取决于{{1}}的代码,消除了循环依赖关系,解决了这个问题。希望Webpack会以某种方式警告我。
修改:在@cookie there's a plugin for circular dependency detection指出的最后一个注释中,如果您想避免再次遇到此问题。