CommonJS,AMD和CMD规范的区别

原创 2016年05月31日 10:41:09

1、CommonJS

         CommonJS 是javascript模块化编程的一种规范,主要是在服务器端模块化的规范,一个单独的文件就是一个模块。每一个模块都是一个单独的作用域,在该模块内部定义的变量,无法被其他模块读取,除非定义为global对象的属性。

        在CommonJS中有一个全局性方法require( ),用于加载模块。CommonJS 加载模块是同步的,所以只有加载完成才能执行后面的操作。像Node.js主要用于服务器的编程,加载的模块文件一般都已经存在本地硬盘,所以加载起来比较快,不用考虑异步加载的方式,所以CommonJS规范比较适用。但如果是浏览器环境,要从服务器加载模块,这是就必须采用异步模式。所以就有了 AMD,CMD 解决方案。

2、AMD

        CommonJS是主要为了JS在后端的表现制定的,他是不适合前端的。 先分析一下浏览器端的js和服务器端js都主要做了哪些事:

   ---------------------------------------服务器端JS   |    浏览器端JS-------------------------------------------                               

                                 相同的代码需要多次执行  |    代码需要从一个服务器端分发到多个客户端执行                                  

                                   CPU和内存资源是瓶颈   |    带宽是瓶颈                                   

                                         加载时从磁盘中加载   |    加载时需要通过网络加载 -

        于是AMD(异步模块定义)出现了,它就主要为前端JS的表现制定规范。

         加载模块是异步方式,模块的加载不影响它后面语句的执行。所有依赖这个模块的语句,都定义到一个回调函数中,等到加载完成之后,这个回调函数才会运行。

         AMD规范使用define方法定义模块,通过数组引入依赖 ,回调函数通过形参传入依赖:

    define(["/libs/jquery"], function(jquery){

        function log(){

            alert("hello world!");

        }

        return {

            log: log

        }

    });

      当然AMD也允许输出模块兼容CommonJS规范:

    define(function(require, exports, module){

        var module = require("module");

        module.doSometing( );

        exports.do = function(){

            module.doSometing( );

        }

    });

       AMD 是 RequireJS 在推广过程中对模块定义的规范化产出

3、CMD

      大名远扬的玉伯写了seajs,就是遵循他提出的CMD规范,与AMD相近,不过用起来感觉更加方便。

      CMD和AMD的区别有以下几点:
      ① 对于依赖的模块AMD是提前执行,CMD是延迟执行。不过RequireJS从2.0开始,也改成可以延迟执行(根据写法不同,处理方式不通过)。
     ② CMD推崇依赖就近,AMD推崇依赖前置。
      //AMD
define(['./a','./b'], function (a, b) {
    //依赖一开始就写好
    a.test();
    b.test();
});
    //CMD
define(function (requie, exports, module) {    
    //依赖可以就近书写
    var a = require('./a');
    a.test();    
    ...
    //软依赖
    if (status) { 
        var b = requie('./b');
        b.test();
    }
});
       虽然 AMD也支持CMD写法,但依赖前置是官方文档的默认模块定义写法。

      AMD的api默认是一个当多个用,CMD严格的区分推崇职责单一。例如:AMD里require分全局的和局部的。CMD里面没有全局的 require,提供 seajs.use()来实现模块系统的加载启动。CMD里每个API都简单纯粹。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

【新手入门 最精炼总结】AMD/CMD/CommonJs到底是什么?它们有什么区别?

知道JS有模块化开发的说法,也偶尔听过requireJs,AMD,CMD等等名字,甚至使用node的时候,还用过require之类的方法,但是对这些一直没有一个明确的认识和概念。想必这就是许多新手刚接...

CommonJS、AMD和CMD区别

commonjs、AMD、CMD均是js的模块规范,那么三者的区别是什么呢?这里对三者作简短介绍:1、commonjsCommonJS定义的模块分为:{模块引用(require)}、 {模块定义(ex...

js-JavaScript规范:CommonJS/AMD/CMD

最近在写一个js的框架,用于js模块化开发。但碍于一直都没有好好的去了解下现在主流的js规范,导致很多时候不管是函数的命名或者是函数的API都是由自己主观制定的,所以今天决定花时间把js的规范给整理一...

理解AMD ,CMD,CommonJS规范

这是一篇关于javascript模块化AMD,CMD,CommonJS的学习总结,作为记录也给同样对三种方式有疑问的童鞋们,有不对或者偏差之处,望各位大神指出,不胜感激。 本篇默认读者大概知道req...

CommonJS、AMD和CMD规范

CommonJS规范是Node.js遵循的规范。 1. 标识符require为一个全局函数,它仅有一个参数为字符串,该字符串须遵守Module Identifiers的六点规定。 2. requir...

AMD、CMD和CommonJS规范

AMD 与 CMD
  • vuturn
  • vuturn
  • 2016-08-11 16:27
  • 4207

Javascript 模块规范 CommonJS ,AMD ,CMD

1.CommonJS 模块规范 早就听说有用于本地编程的JavaScript框架,但总觉得是小打小闹不成气候,也没有什么实用价值。但自从CommonJS和NodeJS两个项目的出现,JavaScrip...
  • pc_286
  • pc_286
  • 2015-12-10 11:45
  • 1938

再谈 JS中的模块规范(CommonJS,AMD,CMD)来自玉伯的seajs分析

随着互联网的飞速发展,前端开发越来越复杂。本文将从实际项目中遇到的问题出发,讲述模块化能解决哪些问题,以及如何使用 Sea.js 进行前端的模块化开发。恼人的命名冲突我们从一个简单的习惯出发。我做项目...

CommonJs,AMD,CMD

欢迎访文我的博客YangChen’s Blog前端项目做大了做复杂了免不了要模块化,说起模块化自然就要提到这三者,因为这3个是前端模块化的标准,没有它们js不会像现在这样流行,也不会有npm这个包管理...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)