AMD和CMD都是用浏览器端的模块规范,而在服务器比如说node,采用的则是CommonJS规范。
require.js会自动分析依赖关系,将需要加载的模块正确加载。
- AMD是RequireJS在推广过程中对模块定义的规范化产出。定义了define这个函数应该如何书写,只要按照这个规范书写模块和依赖,require.js就能正确的解析。
- Sea.js在推广过程中对模块定义的规范化产出CMD
- CMD和AMD区别:1.AMD推荐依赖前置,依赖必须一开始就写好,提前执行,加载好模块再执行代码。2.CMD推崇依赖就近,依赖可以就近书写,延迟执行,require的时候才去加载文件。
CommonJS 是node的规范 和sea.js结果一致
CommonJS模块是同步的,只有加载完成,才能执行后面的函数。因为Node主要用于服务器编程,文件一般存在本地硬盘,所以加载起来比较快,不用考虑非同步加载的方式。
AMD模块则是非同步加载模块,允许指定回调函数,如果是浏览器环境,要从服务端加载模块,就必须采用非同步模式,因此浏览器一般用AMD模范。
ES6模块方案:export导出,import导入。跟require的执行结果是一致的,也是需要将使用的模块先加载完再执行代码
Es6与CommonJS的差异
-
CommonJS模块输出的是一个值的浅拷贝,也就是说,一旦输出一个值,内部的变化就影响不到这个值。 ES6模块输出的是值的引用,
-
CommonJS是运行再加载,ES6是编译时输出接口
commonjs加载的是一个对象,即module.exports属性,该对象只有在脚本运行完才会生成,而es6模块不是对象,它的外接口只是一种静态定义,在代码静态解析阶段就会生成
es6模块是动态引用