模块化
模块化,AMD(require.js),require,CMD,es Module 这些,里面的变量 require, exports 都是相似的单词,确实容易搞得头昏 😵
概述
-
产 生的原因:
代码量大,广泛使用第三方库,需要将代码拆分并通过某种方式连接起来。
-
模块模式背后的基本思想
将逻辑分块,各自封装,相互独立,每个块自行决定对外暴露什么,同时自行决定引入执行哪些外部的代码。
-
模块系统的核心:管理依赖
模块系统的核心是管理依赖。当前的模块向模块系统声明一组外部模块,这些外部模块对于当前的模块正常运行是必需的。模块系统检视这些依赖,进而保证这些依赖能够被加载,并在当前模块运行时初始化所有依赖。每个模块都有唯一的标识符。
-
模块加载:
在浏览器中,加载模块并执行模块需要先加载所有的依赖以及执行所有的依赖。如果没有收到依赖代码,需等待请求。收到依赖代码之后,浏览器需要确定刚收到的模块是否也有依赖,递归地评估并加载所有依赖,直至所有依赖模块都加载完成。整个依赖图加载完成,才会执行入口模块。
解决的问题
- 变量间的相互污染,变量名冲突等问题。
- 代码拆分,在架构上解耦。
- 依赖管理的问题。
可以使用 IIFE 模拟实现模块化,通过函数作用域解决了命名冲突、污染全局作用域的问题。