Seasons123 changed the title from mst-CMD,AMD,UMD,commonjs,requirejs,seajs to mst-关于模块化:CMD,AMD,UMD,commonjs,requirejs,seajs on 22 Jun
Seasons123 changed the title from mst-关于模块化:CMD,AMD,UMD,commonjs,requirejs,seajs tomst-关于模块化:CMD,AMD,UMD,commonjs,requirejs,seajs,webpack on 22 Jun
commonjscommonjs起初是服务端模块的规范,nodejs就是采用这个规范。CommonJs原来是叫ServerJs,从名字可以看出是专攻服务端的,为了统一前后端而改名CommonJs。它的规范是一个单独的文件就是一个模块。加载模块使用require方法,该方法读取文件并执行,最后导出一个exports对象。commonjs是同步加载模块,加载完成后执行操作。服务端require一个模块,直接就从硬盘或者内存中读取了,消耗的时间可以忽略,就没有必要采用异步方式的来加载。但是如果我们考虑到浏览器端的话,就肯定知道,同步加载,阻塞页面的渲染,造成页面白屏,或者卡死等现象,对于用户体验肯定是不友好的。另外,资源的加载方式与服务端完全不同,在浏览器端,需要从服务端来下载这个文件,然后运行里面的代码才能得到API,需要花费一个http请求,也就是说,require后面的一行代码,需要资源请求完成才能执行。由于浏览器端是以插入<script>标签的形式来加载资源的(ajax方式不行,有跨域问题),没办法让代码同步执行,所以像commonjs那样的写法会直接报错。所以就有了AMD,CMD. AMD即Asynchronous Module Definition的缩写,字面意思”异步模块定义”,就是一种规范。依赖前置(依赖在使用之前都必须提前加载)。requirejs可以简单理解为AMD规范的一种实现。下面介绍。 (2) dependencies UMD即Universal Module Definition,应该算是AMD和commonjs的一个糅合。 CMDCMD 即Common Module Definition通用模块定义,CMD规范是国内发展出来的,就像AMD有个 因为CMD推崇:一个文件一个模块,所以经常就用文件名作为模块id demo AMD,CMD 区别 关于这两个的区别网上可以搜出一堆文章,简单总结一下 这种区别各有优劣,只是语法上的差距,而且requireJS和SeaJS都支持对方的写法 AMD和CMD最大的区别是对依赖模块的执行时机处理不同,注意不是加载的时机或者方式不同 requirejs seajs这两个分别是ADM,CMD的实现方案,肯定有异同。 什么是Webpack?事实上它是一个打包工具,而不是像RequireJS或SeaJS这样的模块加载器,通过使用Webpack,能够像 |
阮老师的相关文集: Javascript模块化编程(二):AMD规范 Javascript模块化编程(三):require.js的用法 |
关于各个模块规范的老底吕师兄写过一篇也很好: |
JavaSript模块化
在了解AMD,CMD规范前,还是需要先来简单地了解下什么是模块化,模块化开发?
模块化是指在解决某一个复杂问题或者一系列的杂糅问题时,依照一种分类的思维把问题进行系统性的
分解以之处理。模块化是一种处理复杂系统分解为代码结构更合理,可维护性更高的可管理的模块的方
式。可以想象一个巨大的系统代码,被整合优化分割成逻辑性很强的模块时,对于软件是一种何等意义的
存在。对于软件行业来说:解耦软件系统的复杂性,使得不管多么大的系统,也可以将管理,开发,维护
变得“有理可循”。
还有一些对于模块化一些专业的定义为:模块化是软件系统的属性,这个系统被分解为一组高内聚,低
耦合的模块。那么在理想状态下我们只需要完成自己部分的核心业务逻辑代码,其他方面的依赖可以通过
直接加载被人已经写好模块进行使用即可。
首先,既然是模块化设计,那么作为一个模块化系统所必须的能力:
好了,思想有了,那么总要有点什么来建立一个模块化的规范制度吧,不然各式各样的模块加载方式只
会将局搅得更为混乱。那么在JavaScript中出现了一些非传统模块开发方式的规范 CommonJS的模块规
范,AMD(Asynchronous Module Definition),CMD(Common Module Definition)等。
http://blog.chinaunix.net/uid-26672038-id-4112229.html