AMD 是 RequireJS 在推广过程中对模块定义的规范化产出。
CMD 是 SeaJS 在推广过程中对模块定义的规范化产出。
类似的还有 CommonJS Modules/2.0 规范,是 BravoJS 在推广过程中对模块定义的规范化产出。
还有不少⋯⋯
这些规范的目的都是为了 JavaScript 的模块化开发,特别是在浏览器端的。
目前这些规范的实现都能达成,浏览器端模块化开发的目的。
区别:
- AMD在做依赖开发时,提倡的是依赖前置 ,而CMD则是延迟执行。(从RequireJS2.0开始,也改成可以延迟执行。根据写法不同,处理方式不同)
- CMD提倡依赖就近原则,而AMD提倡依赖前置
在CMD中 一个依赖项可以在代码内声明,而在AMD中必须在代码开始时首先声明
虽然 AMD 也支持 CMD 的写法,同时还支持将 require 作为依赖项传递,但 RequireJS 的作者默认是最喜欢上面的写法,也是官方文档里默认的模块定义写法。
AMD的 API 默认是一个当多个用, CMD的 API 严格区分,推崇职责单一。比如 AMD
里,require
分全局 require
和局部 require
,都叫 require
。CMD 里,没有全局 require
,而是根据模块系统的完备性,提供 seajs.use
来实现模块系统的加载启动。 CMD 里,每个 API 都简单纯粹。