从模块化谈起
近年来,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 来导出需要暴露的接口。但它的缺点也是显而易见的,即一个文件一个文件的加载很容易发生阻塞。


