前端模块化规范笔记
目前通行的Javascript的模板规范共有两种:CommonJS 和 AMD
commonjs
nodejs的模块系统,是参照commonjs规范实现的
commonjs即为服务器端模块的规范。 commonjs的规范: 根据commonjs规范,一个单独的文件就是一个模块。加载模块使用require方法,该方法读取一个文件并执行,最后返回文件内部的exports对象
AMD
commonjs规范加载模块是同步的,也就是说,只有加载完成,才能执行后面的操作。AMD规范则是非同步加载模块,允许指定回调函数。由于Node.js主要用于服务器编程,模块文件一般都已经存在于本地硬盘,所以加载起来比较快,不用考虑非同步加载的方式,所以commonjs规范比较适用。但是,如果是浏览器环境,要从服务器端加载模块,这时就必须采用非同步模式,因此浏览器端一般采用AMD规范。
可以理解为AMD即为能在客户端环境,并且能兼容服务器端模块的一种模块规范
- AMD的模块定义:
AMD规范使用define方法定义模块
Define第一个参数表达依赖的模块数组,第二个为加载完依赖的模块数组后,模块执行的函数
- AMD的模块加载定义:跟commonjs一样,AMD也采用require()语句来加载模块,但是与commonjs不同的是,它要求有两个参数:
第一个参数[module],是一个数组,里面的成员就是要加载的模块;第二个参数callback,则是加载成功之后的回调函数
AMD和CMD对比
对于依赖的模块,AMD是提前执行,CMD是延迟执行。不过 RequireJS 从 2.0 开始,也改成可以延迟执行(根据写法不同,处理方式不同)。CMD推崇 as lazy as possible.
CMD推崇依赖就近,AMD推崇依赖前置
AMD的API默认是一个当多个用,CMD的API 严格区分,推崇职责单一。比如AMD里,require分全局require和局部require,都叫require。CMD里,没有全局 require,而是根据模块系统的完备性,提供seajs.use来实现模块系统的加载启动。CMD里,每个API都简单纯粹。
参考资料
IMWEB团队博客
知乎问答
关键字:JavaScript, cmd, commonjs, 模块
版权声明
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处。如若内容有涉嫌抄袭侵权/违法违规/事实不符,请点击 举报 进行投诉反馈!