commonJs和AMD

哼,有人说js木有模块,那po主就写篇文章介绍下js的模块化

对于大型web应用,尤其是单页应用,多人协作的场景,模块化灰常重要。但是js语言本身是木有相关规范的,于是乎模块化规范应运而生!比较流行的有commonJs、AMD和CMD。

commonJs

commonJs的由来,还是得从node.js说起,node的出现,使得服务端javascript编程成为可能。然而服务端的程序的复杂度往往较高,如果没有模块化….想想就好阔怕,于是乎commonJs出现了,用来规范javascript的模块化。比如有个模块,util.js

var util=require('util');
util.isPhone('1234567');

require就类似于java里的import(某种程度上)

AMD

既然服务端javascript有了模块化规范,很自然的,浏览器端也想要啊,而且最好两者通用。

But,还是上面那个例子

var util=require('util');
util.isPhone('1234567');

在浏览器端会有啥问题呢,第二行代码必须在util.js文件加载完成之后才能执行,不然会报错的啊。这在服务端不是个问题,文件都在本地硬盘,同步读取文件木有问题。但在浏览器端,谁能保证js啥时候加载完啊魂淡!

所以,浏览器端的模块加载要用异步,于是乎AMD规范粗线了。

前面的例子改为AMD,就是下面这样

require(['util'], function (util) {
  util.isPhone('1234567');
});

util.js文件加载完成之后,执行回调,判断是否是手机号

require.js实现了AMD规范。

CMD

最后说下CMD,CMD是sea.js对模块化的定义,更多的可以移步这里

本文不做详解了