一、commonJS
定义模块
根据CommonJS规范,一个单独的文件就是一个模块。每一个模块都是一个单独的作用域,也就是说,在该模块内部定义的变量,无法被其他模块读取,除非定义为global对象的属性特点
1.CommonJS规范加载模块是同步的,也就是说,只有加载完成,才能执行后面的操作。模块输出与加载
2.nodejs中的模块化机制,模块通过require()引入,exports或modules.exports导出
常用于:服务器端,node,webpack
二、AMD
特点
1.异步加载:因为面向浏览器端,为了不影响渲染肯定是异步加载
2.依赖前置:所有的依赖必须写在最初的依赖数组中,速度快,但是会浪费资源,预先加载了所有依赖不管你是否用到
3.AMD规范则是非同步加载模块,允许指定回调函数。
三、CMD
1.是需要的时候去请求,而不是先加载再使用。
2.RequireJS用的就是AMD,AMD用define定义方法,用require引用模块
特点
1.异步加载
2.按需加载 / 依赖就近:用到了再引用依赖,方便了开发,缺点是速度和性能较差。
四、AMD与CMD的区别
AMD推崇依赖前置,在定义模块的时候就要声明其依赖的模块。
CMD推崇就近依赖,只有在用到某个模块的时候再去require。
对于依赖的模块AMD是提前执行,CMD是延迟执行。不过RequireJS从2.0开始,也改成可以延迟执行(根据写法不同,处理方式不通过)。
AMD推崇依赖前置,AMD的api默认是一个当多个用,CMD严格的区分