Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >require.js 循环依赖介绍

require.js 循环依赖介绍

作者头像
用户7576687
修改于 2020-11-09 02:37:12
修改于 2020-11-09 02:37:12
3.4K00
代码可运行
举报
文章被收录于专栏:POSCREDITPOSCREDIT
运行总次数:0
代码可运行

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

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

解决方案:

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

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

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

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

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

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

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

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
what is 模块化?
将一个复杂的程序按照一定的规范,封装成几个块(文件),并进行组合在一起。 这些模块,最好都做到可复用性,比如可以在多个文件中使用处理时间的模块。
用户4793865
2023/01/12
1.3K0
what is 模块化?
NodeJS学习二CommonJS规范
Node程序由许多个模块组成,每个模块就是一个文件。Node模块采用了CommonJS规范。
空空云
2018/09/27
6280
模块化的一些小研究
我们知道最常见的模块化方案有CommonJS、AMD、CMD、ES6,AMD规范一般用于浏览器,异步的,因为模块加载是异步的,js解释是同步的,所以有时候导致依赖还没加载完毕,同步的代码运行结束;CommonJS规范一般用于服务端,同步的,因为在服务器端所有文件都存储在本地的硬盘上,传输速率快而且稳定。
lhyt
2022/09/21
3740
模块化的一些小研究0.前言1.script标签引入2.AMD与CMD3.CommonJS与ES64.循环依赖5.webpack是如何处理模块化的
我们知道最常见的模块化方案有CommonJS、AMD、CMD、ES6,AMD规范一般用于浏览器,异步的,因为模块加载是异步的,js解释是同步的,所以有时候导致依赖还没加载完毕,同步的代码运行结束;CommonJS规范一般用于服务端,同步的,因为在服务器端所有文件都存储在本地的硬盘上,传输速率快而且稳定。
lhyt
2018/10/31
1.3K0
require() 源码解读
2009年,Node.js 项目诞生,所有模块一律为 CommonJS 格式。 时至今日,Node.js 的模块仓库 npmjs.com ,已经存放了15万个模块,其中绝大部分都是 CommonJS
ruanyf
2018/04/12
8960
require() 源码解读
require与imoprt的区别
在讨论require和import的区别之前,我们首先要了解的是,es6module的代码最终都会被打包工具转化为require才能实行,关于这俩的区别网上有大把的文章,但是都不是很系统,小编这里整合了一下,总结了一下这两者区别,require遵循的是commonjs规范,import遵循的是es6module规则。
挥刀北上
2019/07/19
1.2K0
require与imoprt的区别
微生活时光机:去项目中挖掘JS模块化简史
让我们把眼光投向微生活各个时期项目中的 JS 代码,看一看时代在其中投下的烙印,也许只是管中窥豹、走马观花,但通过其组织形式的异同,或可一瞥 JS 模块化层面的历史脉络。
江米小枣
2020/06/15
6770
彻底理清 AMD,CommonJS,CMD,UMD,ES6 modules
1.Rollup 是什么2.CommonJS、AMD、CMD、UMD、ES6 分别的介绍3.ES6 模块与 CommonJS 模块的区别4.模块演进的产物 —— Tree Shaking5.Tree Shaking 应该注意什么
前端迷
2020/02/24
2.5K0
CommonJS与ES6 Module的本质区别
动态与静态CommonJS与ES6 Module最本质的区别在于前者对模块依赖的解决是“动态的”,而后者是“静态的”。在这里“动态”的含义是,模块依赖关系的建立发生在代码运行阶段;而“静态”则是模块依赖关系的建立发生在代码编译阶段。
砖业洋__
2023/05/06
4340
Javascript模块化编程(三):require.js的用法
这个系列的第一部分和第二部分,介绍了Javascript模块原型和理论概念,今天介绍如何将它们用于实战。 我采用的是一个非常流行的库require.js。 一、为什么要用require.js? 最早的时候,所有Javascript代码都写在一个文件里面,只要加载这一个文件就够了。后来,代码越来越多,一个文件不够了,必须分成多个文件,依次加载。下面的网页代码,相信很多人都见过。   <script src="1.js"></script>   <script src="2.js"></scrip
汤高
2018/03/28
2.5K0
简单的复习下前端模块化相关的知识
作为前端开发,模块化我们已经耳熟能详,我们平时接触到的 ES6 的 import,nodejs中的require他们有啥区别?
前端达人
2022/04/18
4490
module.exports和exports,应该用哪个
在这篇文章中,我将介绍如何在 Node.js 中使用模块,重点是如何导出和消费它们。
chuckQu
2023/09/12
2890
module.exports和exports,应该用哪个
【THE LAST TIME】深入浅出 JavaScript 模块化
随着互联网的发展,前端开发也变的越来越复杂,从一开始的表单验证到现在动不动上千上万行代码的项目开发,团队协作就是我们不可避免的工作方式,为了更好地管理功能逻辑,模块化的概念也就渐渐产生了。
Nealyang
2020/01/14
7350
【THE LAST TIME】深入浅出 JavaScript 模块化
node.js中“模块”Module的概念和介绍
在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护。
acoolgiser
2019/01/17
1K0
Node.js自定义模块
注意:相对路径必须加 ./ 可以省略后缀名(.js) 相对路径中的./不能省略,否则报错,省略代表的是核心模块
兮动人
2021/06/11
1.5K0
Node.js自定义模块
CommonJS、ES6模块加载机制详解
无论是前端开始后端,总会有很多概念。就拿这个前端模块加载机制来说,随着语言的发展,各种概念。
前朝楚水
2019/03/07
2.2K0
webpack模块化原理-ES module
上一篇文章介绍了webpack对commonjs模块的支持(如果你还没读过,建议你先阅读),这篇文章来探究一下,webpack是如何支持es模块的。
Keller
2021/12/14
1.4K0
前端模块化-CommonJS,AMD,CMD,ES6
随着 JavaScript 工程越来越大,团队协作不可避免,为了更好地对代码进行管理和测试,模块化的概念逐渐引入前端。模块化可以降低协同开发的成本,减少代码量,同时也是“高内聚,低耦合”的基础。
李振
2021/11/26
4500
JavaSript模块规范 - AMD规范与CMD规范介绍
JavaSript模块化     在了解AMD,CMD规范前,还是需要先来简单地了解下什么是模块化,模块化开发?     模块化是指在解决某一个复杂问题或者一系列的杂糅问题时,依照一种分类的思维把问题进行系统性的分解以之处理。模块化是一种处理复杂系统分解为代码结构更合理,可维护性更高的可管理的模块的方式。可以想象一个巨大的系统代码,被整合优化分割成逻辑性很强的模块时,对于软件是一种何等意义的存在。对于软件行业来说:解耦软件系统的复杂性,使得不管多么大的系统,也可以将管理,开发,维护变得“有理可循”。  
用户1174387
2018/01/17
1.7K0
深入Node.js的模块加载机制,手写require函数
模块是Node.js里面一个很基本也很重要的概念,各种原生类库是通过模块提供的,第三方库也是通过模块进行管理和引用的。本文会从基本的模块原理出发,到最后我们会利用这个原理,自己实现一个简单的模块加载机制,即自己实现一个require。
蒋鹏飞
2020/10/15
1.2K0
相关推荐
what is 模块化?
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验