资讯专栏INFORMATION COLUMN

CommonJS 和 AMD

haitiancoder / 1801人阅读

摘要:简单来讲,它是一个规范。规范规定,每个模块内部,变量代表当前模块。这个变量是一个对象,它的属性即是对外的接口。加载模块是同步的,所以只有加载完成才能执行后面的操作。

对于前端开发者来说 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都主要做了哪些事,有什么不同了:

于是乎,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://www.ucloud.cn/yun/92840.html

相关文章

  • 关于JavaScript模块规范之CommonJSAMDCMD

    摘要:所有依赖这个模块的语句,都定义在一个回调函数中,等到加载完成之后,这个回调函数才会运行。也采用语句加载模块,但是不同于,它要求两个参数第一个参数,是一个数组,里面的成员就是要加载的模块第二个参数,则是加载成功之后的回调函数。 本篇文章来自对文章《js模块化编程之彻底弄懂CommonJS和AMD/CMD!》的总结,大部分摘自文章原话,本人只是为了学习方便做的笔记,之后有新的体会会及时补充...

    binaryTree 评论0 收藏0
  • js中的模块化——commonjs,AMD,CMD,UMD,ES6

    摘要:若不存在则模块标识应该默认定义为在加载器中被请求脚本的标识。这也是目前很多插件头部的写法,就是用来兼容各种不同模块化的写法。语句输出的值是动态绑定的,绑定其所在的模块。 前言 历史上,js没有模块化的概念,不能把一个大工程分解成很多小模块。这对于多人开发大型,复杂的项目形成了巨大的障碍,明显降低了开发效率,java,Python有import,甚至连css都有@import,但是令人费...

    qpal 评论0 收藏0
  • 关于CommonJSAMD、CMD、UMD说明

    摘要:函数有两个参数,第一个参数是当前运行时环境,第二个参数是模块的定义体。在执行规范时,会优先判断是当前环境是否支持环境,然后再检验是否支持环境,否则认为当前环境为浏览器环境 CommonJS规范 CommonJS定义的模块分为3部分: require 模块引用 exports 模块导出 module 模块本身 根据CommonJS规范,一个单独的文件就是一个模块。每一个模块都是一个...

    harryhappy 评论0 收藏0
  • 一览js模块化:从CommonJS到ES6

    摘要:模块化规范有的模块系统。规范是服务器端模块的规范,由推广使用。对于依赖的模块,是提前执行,是延迟执行。浏览器厂商和都宣布要原生支持该规范。它将逐渐取代和规范,成为浏览器和服务器通用的模块解决方案。 本文由云+社区发表 模块化是指把一个复杂的系统分解到一个一个的模块。 模块化开发的优点: (1)代码复用,让我们更方便地进行代码管理、同时也便于后面代码的修改和维护。 (2)一个单独的文件就...

    antz 评论0 收藏0
  • 前端模块化规范笔记

    摘要:目前通行的的模板规范共有两种和的模块系统,是参照规范实现的即为服务器端模块的规范。规范则是非同步加载模块,允许指定回调函数。 目前通行的Javascript的模板规范共有两种:CommonJS 和 AMD commonjs nodejs的模块系统,是参照commonjs规范实现的 commonjs即为服务器端模块的规范。 commonjs的规范: 根据commonjs规范,一个单独的...

    honmaple 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<