先说说CommonJS

CommonJS - 大家是不是觉得JavaScript仅仅是一个客户端的编译语言,其实JavaScript设计之初不仅仅是针对客户端设计的语言。后来只是由于Web的迅速流行,加之Netscape和微软之间之争过早的将JavaScipt标准化。要了解详细的JS历史请查看:http://zh.wikipedia.org/zh-cn/JavaScript。过早的标准化JS就导致JS的诸多缺陷和标准类库的缺乏,即使这样也不影响JS成为一门优秀的编程语言(比如现在非常流行的Node.js)。目前JS仅仅包括基本的API,如果要作为一个server端的编程语言,像IO, FS, i18n, package等等特性都没有,CommonJS是一个组织,它让JS可以在共同的方向上做努力,来完善JS。尽量Common JS现在还没有一个正式版发布,但是很多方向的草案的实现都已经取得很好的成果。例如现在非常流行的Node.js。

再回到本文的主题来,CommonJS和AMD,RequireJS有什么关系呢?原来CommonJS其中就有一个Modules规范,我们都像JS现在这样所有东西都写在一个文件中来写server端应用是一件非常困难的事情,它就是来解决JS没有模块化管理代码的功能。关键部分就二个函数:

require - 用来引入依赖
export - 用来导出模块,包括标识符(identifier)和模块内容(contents)
CommonJS并没有只是一个规范,就像Java中的Interface一样,并没有注明你应该怎么实现。

问题在于CommonJS的这个Modules规范设计之初是为了server端设计的,它是一个同步的模式。但是这种模式并不适合于浏览器端,大家设想一下如果浏览器同步模式一个一个加载模块,那么打开将会变得非常的慢,所以AMD就是为了这个诞生,它最大的特点就是可以异步的方式加载模块,具体的不同在于AMD有一个define函数,它可以让当前模块运行时先加载当前模块所依赖的模块,例如以下定义的意义就是在运行function时先加载依赖的module, dependency, array模块。

define('module/id/string', ['module', 'dependency', 'array'],
function(module, dependency, array) {
return ModuleContents;
});
所以说CommonJS Module和AMD都是JS模块化定义的API,出自相同的起源的,就是可以让JS可以模块化加载。

那么RequrieJS其实就是AMD现在用的最广泛,最流行的实现。在RequireJS网站上的介绍其实也有说明RequireJS诞生的原因,只是当时我并没有看懂。

RequireJS is a JavaScript file and module loader. It is optimized for in-browser use, but it can be used in other JavaScript environments, like Rhino and Node. Using a modular script loader like RequireJS will improve the speed and quality of your code.
从以上基本可以看清CommonJS(泛指Modules规范),AMD和RequireJS之前的关系了。简单的来讲CommonJS Modules和AMD都是为了解决JS模块化的规范API,CommonJS更适合于Server端,而AMD基本是用于浏览器端(不过它也可以用于Server端,比如Node loader的方向的努力:http://requirejs.org/docs/node.html),而RequireJS就是AMD最流行的实现。

CommonJS, AMD 和 RequireJS之间的关系(转载)的更多相关文章

  1. JavaScript模块化编程 - CommonJS, AMD 和 RequireJS之间的关系

    这几天在学习CommonJS的时候突然在StackOverflow上搜索到一个非常好的一个帖子,是关于CommonJS, AMD和RequireJS之间的关系的问答贴.我感觉写的非常好,鉴于没有找到相 ...

  2. 【JavaScript】JavaScript模块化编程 - CommonJS, AMD 和 RequireJS之间的关系

    通行的Javascript模块规范共有两种:CommonJS和AMD 先说说CommonJS   CommonJS - 大家是不是觉得JavaScript仅仅是一个客户端的编译语言,其实JavaScr ...

  3. Java中JDK,JRE和JVM之间的关系-(转载)

    初学JAVA很容易被其中的很多概念弄的傻傻分不清楚,首先从概念上理解一下吧,JDK(Java Development Kit)简单理解就是Java开发工具包,JRE(Java Runtime Envi ...

  4. CommonJS, AMD ,CMD之间的关系

    commonjs是用在服务器端的,同步的,如nodejs amd, cmd是用在浏览器端的,异步的,如requirejs和seajs 其中,amd先提出,cmd是根据commonjs和amd基础上提出 ...

  5. 关于commonjs,AMD,CMD之间的异同

    1.简介 随着前端业务复杂度的增加,模块化成为一个大的趋势.而在ES6还未被浏览器所支持的情况下,commonjs作为ES6中标准模块加载方案,在客服端中的支持情况并不好,现在在客服端中有2中模块化的 ...

  6. (转载)CPU、内存、硬盘、指令以及他们之间的关系

    CPU.内存.硬盘.指令以及他们之间的关系 最近读完<程序是怎样跑起来的>以及<深入理解计算机系统>的3.6.9章节后对计算机的组成有了更深入细致的了解,现总结一下对CPU.内 ...

  7. 转载:Linux图形界面知识(介绍X、X11、GNOME、Xorg、KDE等之间的关系)

    转载 http://blog.csdn.net/zhangxinrun/article/details/7332049Linux初学者经常分不清楚linux和X之间,X和Xfree86之间,X和KDE ...

  8. 网络互联技术(2)——前篇—【转载】电脑结构和CPU、内存、硬盘三者之间的关系

    原文链接:传送门 详细内容: 电脑结构和CPU.内存.硬盘三者之间的关系 前面提到了,电脑之父——冯·诺伊曼提出了计算机的五大部件:输入设备.输出设备.存储器.运算器和控制器. 我们看一下现在我们电脑 ...

  9. 进程 、进程组、会话、控制终端之间的关系 (转载 http://blog.csdn.net/yh1548503342/article/details/41891047)

    一个进程组可以包含多个进程 进程组中的这些进程之间不是孤立的,他们彼此之间或者存在者父子.兄弟关系,或者在功能有相近的联系. 那linux为什么要有进程组呢?其实提供进程组就是方便管理这些进程.假设要 ...

随机推荐

  1. Vue.js 整理笔记

    以前我们用Jquery进行dom的操作,虽然熟悉后开发效率很高,但是如果多个控件的相互操作多的情况下,还是会乱.相比之下,Vue的使用更加清晰,通过虚拟dom将数据绑定,而且组件化和路由的帮助下,让整 ...

  2. RabbitMQ修改端口号和心跳时间

    定读者正在Windows系列的操纵体系中装置好了Rabbit MQ后,请找到装置途径下的etc文件夹下,将rabbitmq.config.example备份一份,并点窜为config范例的文件,即为] ...

  3. 【荐】如何规划 Nginx 网站目录的权限(用户,用户组,ssh,sftp)

    从上一篇文章:PHP网站(nginx.php-fpm.mysql) 用户权限解析,可以学习了解到,nginx 和 php-fpm 的用户是如何运作的. 有个工作场景: 1.公司的一台 CentOS 服 ...

  4. linux vi(vim)常用命令汇总

    1 查找 /xxx(?xxx) 表示在整篇文档中搜索匹配xxx的字符串, / 表示向下查找, ? 表示向上查找其中xxx可以是正规表达式,关于正规式就不多说了. 一般来说是区分大小写的, 要想不区分大 ...

  5. How the problem solved about " Dealing with non-fast-forward errors"

    Recently ,I got confused When I use  git to push one of my project. The problem is below: And I Foun ...

  6. BZOJ 2083: [Poi2010]Intelligence test

    Description 问一个序列是不是起始序列的子序列. Sol 二分. 直接维护每个数出现的位置,二分一个最小的就行. Code /******************************** ...

  7. hdu 1281 二分图最大匹配

    对N个可以放棋子的点(X1,Y1),(x2,Y2)......(Xn,Yn);我们把它竖着排看看~(当然X1可以对多个点~) X1   Y1 X2   Y2 X3   Y3 ..... Xn   Yn ...

  8. JS客户端RSA加密,Java服务端解密

    常用语网页客户端对密码加密,在后端java解密还原 java代码依赖    <dependency>      <groupId>commons-codec</group ...

  9. WebView随学笔记

    对于WebView而言我们需要掌握的内容是: /** 学习目标:webView * 1).将WebView加入到应用中 * 2).使用WebView加载页面 * 3).获取网络访问 * 4).在Web ...

  10. 我常用的那些linux命令

    我常用的那些linux命令 用linux也有些年头了,说来也忏愧,说是有些年头了,其实也还是个不长进的主.记得第一次接触linux是boss跟我说的怎么操作,什么编辑模式,按i,a,o进入编辑模式.在 ...