-
AMD
- 是由RequireJS推动一个异步加载模块的规范,通过define定义模块,require去引用模块
- 推崇依赖前置,在定义模块的时候就要声明其依赖的模块,提前执行
-
CMD
- 是由SeaJS推动的模块化规范,推崇一个模块一个文件,通过define定义模块,seajs.use来加载模块
- 推崇就近依赖,只有在用到某个模块的时候再去require,延迟执行
-
CommenJS是一种同步加载模块的规范,被nodejs推广开,使用module.exports和require开发
-
UMD是AMD和CommonJS的糅合,umd先判断是否支持Node.js的模块(exports)是否存在,存在则使用Node.js模块模式。在判断是否支持AMD(define是否存在),存在则使用AMD方式加载模块
模块的循环加载
CommonJS模块是加载时执行,即脚本代码在require时就全部执行。一旦出现某个模块被“循环加载”,就只输出已经执行的部分,没有执行的部分不会输出;再次加载直接从缓存中获取
S6模块对导出变量、方法、对象是动态引用,遇到模块加载命令import时不会去执行模块,只是生成一个指向被加载模块的引用,需要开发者保证真正取值时能够取到值,只要引用是存在的,代码就能执行