学习ES6Module部分的生活看到阮一峰老师提到CommonJS 和 AMD 模块——ES6 在语言标准的层面上,实现了模块功能,而且实现得相当简单,完全可以取代 CommonJS 和 AMD 规范,成为浏览器和服务器通用的模块解决方案。
-
CommonJS规范,加载模块是同步的
module.exports或exports
、reuqire
。require(module)
Node.js采用CommonJS规范。
Node.js主要用于服务器编程,模块一般存在本地硬盘中,加载较快。
tips: Webpack官方推荐使用CommonJs规范,但是也支持CMD、AMD、ES6模块
[2] -
AMD、CMD 规范,模块加载是异步的
require.js采用AMD(Asynchronous Module Definition 异步模块定义),使用define
方法定义模块,require
方法加载模块;require([module],callback)
sea.js采用CMD(通用模块定义)
浏览器环境,模块加载时间取决于网络情况,
AMD和CMD最大的区别是: 对依赖模块的执行时机处理不同(注意不是加载的时机)
很多人说, requireJS是异步加载模块,SeaJS是同步加载模块,这么说实际上是不准确的 ;
二者加载模块都是异步的 ;
只不过AMD依赖前置,可以方便知道依赖了哪些模块,然后马上加载 , 在加载完成后, 就会执行该模块;
而CMD推崇就近依赖,把模块变为字符串解析一遍, 找到依赖了哪些模块, 在加载模块完成后, 不立刻执行, 而是等到require后再执行;
上面只说了异步相关的概念, 其实 require.js / sea.js , 最重要的还是模块化。
模块化降低耦合,依赖清晰,让调试, 加功能, 任务分配和交接都更方便[1] -
ES6
export、import
网友评论