从模块化谈起
近年来,js开发涌现出了诸多模块化解决方案,例如以在浏览器环境之外(服务端)构建 JavaScript
生态系统为目标而产生的CommonJS
规范,从CommonJS
社区中独立出来的AMD
规范(异步模块定义),还有国人制定的CMD
规范等。随着遵循AMD
规范的RequireJS
的流行,AMD
规范在前端界已被广泛认同。后来,随着npm社区的逐渐壮大,CommonJS
也越来越受欢迎,于是产生了统一这两种规范的需求,即希望提供一个前后端跨平台的解决方案,也因此产生了UMD
(通用模块定义)规范。
CommonJS
定义的是模块的同步加载,主要用于Node端;而遵循AMD规范的RequireJS
则是异步加载,适用于浏览器端。requirejs
是一种在线”编译” 模块的方案,相当于在页面上加载一个AMD 解释器,以便于览器能够识别define、exports、module
,而这些东西就是用于模块化的关键。
CommonJS
同步式的require
Node端的模块加载遵循 CommonJS
规范,该规范的核心思想是允许模块通过 require
方法来加载。
该规范首先加载所要依赖的其他模块,然后通过 exports
或 module.exports
来导出需要暴露的接口。但它的缺点也是显而易见的,即一个文件一个文件的加载很容易发生阻塞。