Blog

懒癌晚期


Project maintained by VirusPC Hosted on GitHub Pages — Theme by mattgraham

Back Home

模块化

模块化是指将一个大的程序文件, 拆分成许多小的文件, 然后将小文件组合起来.

模块化的好处:

CommonJS 的 NodeJS 是针对服务器端的. CommonJS 的 Browserify, AMD, CMD 都是针对浏览器端的.

一个模块只能在另一个模块中被调用. 所有的模块需要汇总到一个主模块中, 然后在页面中加载主模块. (把模块看成c语言里的函数, 把主模块看成main函数, 页面加载主模块即执行main函数)

模块化相关规范


CommonJS

说明

实现

语法

例子

AMD

说明

实现(仅浏览器端)

语法(RequireJS)

例子

CMD

说明

实现

语法

例子

ES6

说明

实现

语法

转换成ES5(浏览器兼容)

一些相关问题

为什么CommonJS不适用于浏览器端

假设有如下代码:

let math = require('math');
math.add(2, 3);

第二行math.add(2, 3),在第一行require(‘math’)之后运行,因此必须等math.js加载完成。也就是说,如果加载时间很长,整个应用就会停在那里等。

这对服务器端不是一个问题,因为所有的模块都存放在本地硬盘,可以同步加载完成,等待时间就是硬盘的读取时间。但是,对于浏览器,这却是一个大问题,因为模块都放在服务器端,等待时间取决于网速的快慢,可能要等很长时间,浏览器处于”假死”状态。

因此,浏览器端的模块,不能采用”同步加载”(synchronous),只能采用”异步加载”(asynchronous)。这就是AMD规范诞生的背景。

AMD和CMD对比


参考资料