CommonJS:
commonJS主要用于 Node.js,输出方式有2种:默认输出---module export 和带有名字的输出---exports.area,引入方式为 required。
commonJs是同步加载,所以更适合用在服务端,因为服务端是磁盘读取。如果用在客户端,可能会造成阻塞。
AMD:
AMD是 required.js 所引出的一种规范,通过 required([Module], callback)来进行引入,其中 Module 里传一个数组,依次引入。然后在 callback 中将 module名作为参数使用。
AMD 模式整个过程是异步且依赖前置的,在定义前需要将在 Module 中声明。且 Module 中的模块加载完后立即执行,谁快就先执行谁。这样就导致了,AMD模式虽然运行速度很快,但是里面的代码执行顺序是不可控的,可能会产生大坑。
CMD:
define(function(require, exports, module) {
var $ = require('jquery.js')
$('div').addClass('active');
});
CMD 是 Sea.js的思想,它也是异步并行加载多个模块,不过 CMD 和 AMD 的区别在于,CMD 是在使用前再去 required 加载。虽然 CMD也会在一开始就下载好所有模块,但是确得等到使用前才执行。这样的好处是,整个代码的执行顺序是可控的,方便开发。缺点是执行模块的等待时间会叠加,速度慢。
ES6(import/export):
import/export 和上述的 required 最大的区别就在于,import 输出的是引入值,即导入和导出的值都指向同一个内存地址,所以导入值会随着导出值变化。而 required 是值拷贝,不会互相影响。
import 必须放在开头,required 则无所谓放哪都行。
required 支持动态引入,如:require(${path}/xx.js)。import 目前不支持。