梳理AMD、CMD、CommonJS、ES6 Module的区别

AMD

AMD,全称是Asynchronous Module Definition,即异步模块加载机制。后来由该草案的作者以RequireJS实现了AMD规范,所以一般说AMD也是指RequireJS。

RequireJs基本用法

通过define定义一个模块,使用require导入定义的模块

特点:依赖前置,提前执行


CMD

CMD是SeaJS在推广过程中生产的对模块定义的规范,在Web浏览器端的模块加载器中,SeaJS与RequireJS并称

SeaJs基本用法

特点:依赖就近,延迟执行


CommonJS

CommonJS规范为CommonJS小组所提出,目的是弥补JavaScript在服务器端缺少模块化机制,NodeJS、webpack都是基于该规范来实现的。

commenJs基本用法

解析:

注:不能直接对exports进行赋值,exports和module.exports共享一个地址

特点:

    1、所有代码都运行在模块作用域,不会污染全局作用域;

    2、模块加载是同步的,即只有加载完成,才会往下执行

    3、模块在首次加载后会缓存,再次加载只会返回缓存的结果

    4、require返回的值是被输出值的拷贝,模块内部的变化不会影响该值


Module

ES6 Module是ES6中规定的模块体系,相比上面提到的规范, ES6 Module有更多的优势,有望成为浏览器和服务器通用的模块解决方案。

module基本用法

module特点(对比commonJs)

    1、commonJs是运行时加载,module是编译时输出接口

    2、commonJs是输出模块,将所有的接口全部加载进来,module可以单独加载其中某个接口

    3、commonJs输出的是值的拷贝,module输出的是值的引用,被输出的模块内部的改变会影响引用的改变

    4、commonJs的this指向当前模块,module的this指向undefined

你可能感兴趣的:(梳理AMD、CMD、CommonJS、ES6 Module的区别)