Eri*_*ric 17 circular-dependency commonjs browserify
我正在考虑将一个基于浏览器的大型代码库移到CommonJS(它是一个用TypeScript编写的AngularJS 1.x应用程序).该应用程序具有循环依赖性,因此我认为RequireJS是不可能的.
Browserify如何处理循环依赖?是否存在不同类型的循环依赖关系?或者使用CommonJS/Browserify处理循环依赖的任何提示?
Browserify 没有对循环依赖项添加特殊处理,并且该行为继承自 Node.js。
它如节点模块文档所示,我在下面完整地引用它:
当存在循环 require() 调用时,模块在返回时可能尚未完成执行。
考虑这种情况:
a.js:
console.log('a starting');
exports.done = false;
const b = require('./b.js');
console.log('in a, b.done = %j', b.done);
exports.done = true;
console.log('a done');
Run Code Online (Sandbox Code Playgroud)
b.js:
console.log('b starting');
exports.done = false;
const a = require('./a.js');
console.log('in b, a.done = %j', a.done);
exports.done = true;
console.log('b done');
Run Code Online (Sandbox Code Playgroud)
main.js:
console.log('main starting');
const a = require('./a.js');
const b = require('./b.js');
console.log('in main, a.done = %j, b.done = %j', a.done, b.done);
Run Code Online (Sandbox Code Playgroud)
当main.js加载a.js时,a.js又加载b.js。此时,b.js 尝试加载 a.js。为了防止无限循环,a.js 导出对象的未完成副本将返回到 b.js 模块。然后 b.js 完成加载,并将其导出对象提供给 a.js 模块。
当 main.js 加载这两个模块时,它们都已完成。该程序的输出将是:
$ node main.js
main starting
a starting
b starting
in b, a.done = false
b done
in a, b.done = true
a done
in main, a.done = true, b.done = true
Run Code Online (Sandbox Code Playgroud)
需要仔细规划才能允许循环模块依赖性在应用程序中正常工作。
| 归档时间: |
|
| 查看次数: |
641 次 |
| 最近记录: |