模块化的基础概念
1. 什么是模块化?
- 将程序文件依据一定的规则拆分成多个文件,这种编码方式就是模块化的编码方式。
- 拆分出来的每个文件就是一个模块,模块中的数据都是私有的,模块之间相互隔离。
- 同时也能通过一些手段,可以把模块内的指定数据交出去,供其它模块使用。
- 像后端语言基本上都自带模块化,JS早期没有自带模块化,是NodeJS发展起来后,NodeJS加入了模块化后 ECMA 才加入模块化的。
2. 为什么需要模块化?
随着应用的复杂度越来越高,代码量和文件的数量都急剧增加,会逐渐引发下面的问题:
- 全局污染问题 - 比如不同的人声明了相同名称的变量名和函数名,就会命名冲突
- 依赖混乱问题 - 引入JS文件的顺序要手动调整,被依赖的一定要放前面,放错就会代码运行不起来
- 数据安全问题 - 数据无法隐藏,会全部暴露出来。
3. 目前有哪些模块化规范?
历史背景
2009年,Node.js 出现,让JS不仅能做浏览器端运行,更能在服务器端运行, 随着JavaScrip 在服务器端的应⽤逐渐增多,为了让 Node.js 的代码更好维护,就必须要制定⼀种 Node.js 环境下的模块化规范,来⾃Mozilla 的⼯程师 Kevin Dangoor 提出了 CommonJS 规范(CommonJS 初期的名字叫 ServerJS, 因为NodeJS主要用于服务器端的开发),随后 Node.js 社区采纳了这⼀规范。
随着时间的推移,针对JavaScript 不同的运行环境,相继出现了多种模块化规范,下面是模块化的一些发展历程:
发展历程
- 无模块化阶段 —— (过)
- 命名空间模式 —— (过)
- IIFE模式 (立即执行函数表达式)—— (过)
- ComonJS(CJS) —— 服务器端应用广泛 (学)
- AMD (异步模块)—— 需要用到require.js这个库,导入导出都用define函数 (过)
- CMD —— 阿里搞的模块化,结合了CommonJS和AMD的语法 (过)
- UMD —— 也是社区搞的,因为CJS只能用于服务器端,所以搞个多端适用的UMD(过)
- ES6 模块化 —— 浏览器端应用广泛 (学)
4. 导入和导出的概念
概念
模块化的核心思想就是:模块之间是隔离的,通过导入和导出进行数据和功能的共享。
- 导出(暴露):模块公开其内部的一部分(如:变量、函数等),始这些内容可以被其他模块使用。
- 导入(引入): 模块引入并使用其他模块导出的内容,以重用代码和功能。
