您的位置:首页 > Web前端 > JavaScript

JavaScript模块规范:AMD、CMD和CommonJS

2016-11-16 18:46 681 查看
commonjs是用在服务器端的,同步的,如nodejs 
amd, cmd是用在浏览器端的,异步的,如requirejs和seajs 
其中,amd先提出,cmd是根据commonjs和amd基础上提出的。 


AMD是"Asynchronous
Module Definition"的缩写,意思就是"异步模块定义"。它采用异步方式加载模块,模块的加载不影响它后面语句的运行。

后面的回调函数里面,如果有需要一栏前面的模块,则需要等到前面的模块加载完,如果不依赖前面的模块,则不需要

这样子的写法,看着和AngularJS的写法比较像...

require(['math'], function (math) {
    math.add(2, 3);
  });

math.add()与math模块加载不是同步的,浏览器不会发生假死。

假死--math模块的加载影响它后面语句的运行。

RequireJS是AMD规范的实现...而SeaJS是CMD的实现,二者有以下不同:

1、对于依赖的模块AMD是提前执行,CMD是延迟执行。不过RequireJS从2.0开始,也改成可以延迟执行(根据写法不同,处理方式不通过)。 

2、CMD推崇依赖就近,AMD推崇依赖前置

CommonJS

根据CommonJS规范,一个单独的文件就是一个模块。加载模块使用require方法,该方法读取一个文件并执行,最后返回文件内部的exports对象。

即是Node;

CommonJS 加载模块是同步的,所以只有加载完成才能执行后面的操作。像Node.js主要用于服务器的编程,加载的模块文件一般都已经存在本地硬盘,所以加载起来比较快,不用考虑异步加载的方式,所以CommonJS规范比较适用。但如果是浏览器环境,要从服务器加载模块,这是就必须采用异步模式。所以就有了
AMD  CMD 解决方案。 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息