CommonJS、AMD、CMD、ES6模块化、UMD

116 阅读1分钟

CommonJS:

服务端的模块化规范,主要应用于Node.js,主要特点是同步加载模块, 
1. 同步--如果引用了多个模块,后面的会等待前者加载完成后再执行,由于服务端主要是对于磁盘的读取,这样是可行的。
2. 使用requries导入模块,使用module.exports 导出模块
3.模块在首次执行后就会缓存,再次加载只返回缓存结果。
4.Require返回值是被输出者的浅拷贝,模块内部如果是引用类型修改,会影响到输出值

AMD:

Asynchronous Module Definition--异步模块定义,
1. 它采用异步的方式加载模块,前面不会阻塞后面模块的加载
2. 使用RequireJS实现
3. 使用define来定义,使用requires导入
4. 依赖必须放在顶部,提前执行

CMD:

Common Module Definition 公共模块定义,SeaJS在推广过程中生产的对模块定义的规范
1. 依赖就近,延迟执行
可以在代码中间引入,需要的时候再引入。

ES6模块化

**静态化
1. 静态化,是指 编译时 就能确定模块的 依赖关系 ,以及输出和输入的变量。
    这些依赖关系,CommonJS AMD 只有在运行时才能确认。
2. 通过export 导出,import引入
export可以输出类、函数或者变量

UMD 规范

UMD 是 (Universal Module Definition) 通用模块定义 的缩写。UMD 是 AMD 和 CommonJS 的一个糅合。AMD 是浏览器优先,异步加载;CommonJS 是服务器优先,同步加载。 既然要通用,怎么办呢?那就先判断是否支持 node 的模块,支持就使用 node;再判断是否支持 AMD,支持则使用 AMD 的方式加载。这就是所谓的 UMD。