Skip to content

Latest commit

 

History

History
29 lines (15 loc) · 1.77 KB

模块化.md

File metadata and controls

29 lines (15 loc) · 1.77 KB

AMD和CMD都是用浏览器端的模块规范,而在服务器比如说node,采用的则是CommonJS规范。

require.js会自动分析依赖关系,将需要加载的模块正确加载。

  1. AMD是RequireJS在推广过程中对模块定义的规范化产出。定义了define这个函数应该如何书写,只要按照这个规范书写模块和依赖,require.js就能正确的解析。
  2. Sea.js在推广过程中对模块定义的规范化产出CMD
  3. CMD和AMD区别:1.AMD推荐依赖前置,依赖必须一开始就写好,提前执行,加载好模块再执行代码。2.CMD推崇依赖就近,依赖可以就近书写,延迟执行,require的时候才去加载文件。

CommonJS 是node的规范 和sea.js结果一致

CommonJS模块是同步的,只有加载完成,才能执行后面的函数。因为Node主要用于服务器编程,文件一般存在本地硬盘,所以加载起来比较快,不用考虑非同步加载的方式。

AMD模块则是非同步加载模块,允许指定回调函数,如果是浏览器环境,要从服务端加载模块,就必须采用非同步模式,因此浏览器一般用AMD模范。

ES6模块方案:export导出,import导入。跟require的执行结果是一致的,也是需要将使用的模块先加载完再执行代码

Es6与CommonJS的差异

  1. CommonJS模块输出的是一个值的浅拷贝,也就是说,一旦输出一个值,内部的变化就影响不到这个值。 ES6模块输出的是值的引用,

  2. CommonJS是运行再加载,ES6是编译时输出接口

commonjs加载的是一个对象,即module.exports属性,该对象只有在脚本运行完才会生成,而es6模块不是对象,它的外接口只是一种静态定义,在代码静态解析阶段就会生成

es6模块是动态引用