CommonJS 和 AMD

关于前端开发者来说 CommonJS 和 AMD 是常常碰到的观点,那末 CommonJS 和 AMD 究竟是什么呢?

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 生态系统的项目(比方,在服务器端或者是原生的桌面应用程序)。

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

CommonJS 加载模块是同步的,所以只要加载完成才实行背面的操纵。像Node.js重要用于服务器的编程,加载的模块文件平常都已存在当地硬盘,所以加载起来比较快,不必斟酌异步加载的体式格局,所以CommonJS范例比较实用。但如果是浏览器环境,要从服务器加载模块,这是就必需采纳异步形式。所以就有了 AMD,CMD 解决方案。

AMD(Asynchromous Module Definition)

CommonJS是重要为了js在后端的表现制订的,是不适合前端的,为何这么说呢?这须要剖析一下浏览器端的js和服务器端js都重要做了哪些事,有什么差别了:

《CommonJS 和 AMD》

于是乎,AMD(异步模块定义)涌现了,它就重要为前端JS的表现制订范例。
AMD就只要一个接口:

define(id?,dependencies?,factory)

它要在声明模块的时刻制订一切的依靠(dependencies),而且还要当作形参传到factory中,像如许:

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

参考链接

1. JavaScript 规范参考教程(alpha)
2. amdjs/amdjs-api

    原文作者:山顶的男人
    原文地址: https://segmentfault.com/a/1190000013017796
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞