CommonJS 和 AMD

对于前端开发者来讲 CommonJS 和 AMD 是常常遇到的概念,那么 CommonJS 和 AMD 究竟是什么呢?javascript

CommonJS

CommonJS is a project with the goal of specifying an ecosystem for JavaScript outside the browser (for example, on the server or for native desktop applications).

维基百科说,CommonJS 是一个致力于规范化浏览器以外的 JavaScript 生态系统的项目(例如,在服务器端或者是原生的桌面应用程序)。html

简单来说,它是一个规范。根据这个规范,每一个文件就是一个模块,有本身的做用域。在一个文件里面定义的变量、函数、类,都是私有的,对其余文件不可见。CommonJS 规范规定,每一个模块内部,module变量表明当前模块。这个变量是一个对象,它的exports属性(即module.exports)是对外的接口。加载某个模块,实际上是加载该模块的module.exports属性。前端

CommonJS 加载模块是同步的,因此只有加载完成才能执行后面的操做。像Node.js主要用于服务器的编程,加载的模块文件通常都已经存在本地硬盘,因此加载起来比较快,不用考虑异步加载的方式,因此CommonJS规范比较适用。但若是是浏览器环境,要从服务器加载模块,这是就必须采用异步模式。因此就有了 AMD,CMD 解决方案。java

AMD(Asynchromous Module Definition)

CommonJS是主要为了js在后端的表现制定的,是不适合前端的,为何这么说呢?这须要分析一下浏览器端的js和服务器端js都主要作了哪些事,有什么不一样了:node

图片描述

因而乎,AMD(异步模块定义)出现了,它就主要为前端JS的表现制定规范。
AMD就只有一个接口:git

define(id?,dependencies?,factory)

它要在声明模块的时候制定全部的依赖(dependencies),而且还要当作形参传到factory中,像这样:github

define(['./a', './b'], function(a, b) { // 依赖必须一开始就写好
    a.doSomething()
    // 此处略去 100 行
    b.doSomething()
    ...
})

参考连接

1. JavaScript 标准参考教程(alpha)
2. amdjs/amdjs-api编程

相关文章
相关标签/搜索