require.js 循环依赖介绍

2020-11-09 10:37:12 浏览数 (1)

所谓循环依赖就是a依赖b,b也同时依赖a。

在a执行到require('b')的地方时会停下来去调用b,当去执行b,执行到一半发现require('a'),就停下来去调用a。

解决方案:

当出现循环依赖时,就不要依赖前置加载了,在b需要调用a的某个方法的那个地方先就近加载:var a = require('a'),然后再去调用b中的方法,代码实例如下:

代码语言:javascript复制
[JavaScript] 纯文本查看 复制代码12345678//b.js:define(["require", "a"],  function(require, a) {    return function(title) {      return require("a").doSomething();    }  });

虽然循环依赖是比较少见的,但是有时候还是会遇到的,下面再介绍一种解决方案:

如果熟悉CommonJS,可以使用exports为模块建立一个空object,该object可以立即被其他模块引用。在循环依赖的两头都如此操作之后,就可以安全地持有其他模块了。这种方法仅在每个模块都是输出object作为模块值的时候有效,换成函数无效。

代码语言:javascript复制
[JavaScript] 纯文本查看 复制代码1234567// b.js:define(function(require, exports, module) {  var a = require("a");  exports.foo = function () {    return a.bar();  };});

或者,如果你使用依赖注入数组的步骤,则可用注入特殊的"exports"来解决(pos):

代码语言:javascript复制
[JavaScript] 纯文本查看 复制代码123456// b.js:define(['a', 'exports'], function(a, exports) {  exports.foo = function () {    return a.bar();  };});

0 人点赞