梳理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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容