CommonJS,AMD,CMD区别

zccst转载

学得比较晕,再次看commonjs,amd, cmd时好像还是没完全弄清楚,今天再整理一下:

commonjs是用在服务器端的,同步的,如nodejs

amd, cmd是用在浏览器端的,异步的,如requirejs和seajs

其中,amd先提出,cmd是根据commonjs和amd基础上提出的。

为什么晕呢?是因为没用,或用得太少。光看看文章是不行的。

CommonJS

CommonJs 是服务器端模块的规范,Node.js采用了这个规范。

根据CommonJS规范,一个单独的文件就是一个模块。加载模块使用require方法,该方法读取一个文件并执行,最后返回文件内部的exports对象。

例如:

// foobar.js

//私有变量

var test = 123;

//公有方法

function foobar () {

this.foo = function () {

// do someing ...

}

this.bar = function () {

//do someing ...

}

}

//exports对象上的方法和变量是公有的

var foobar = new foobar();

exports.foobar = foobar;

//require方法默认读取js文件,所以可以省略js后缀

var test = require(‘./boobar‘).foobar;

test.bar();

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

AMD((Asynchromous Module Definition)

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

AMD异步加载模块。它的模块支持对象 函数 构造器 字符串 JSON等各种类型的模块。

适用AMD规范适用define方法定义模块。

//通过数组引入依赖 ,回调函数通过形参传入依赖

define([‘someModule1‘, ‘someModule2’], function (someModule1, someModule2) {

function foo () {

/// someing

someModule1.test();

}

return {foo: foo}

});

AMD规范允许输出模块兼容CommonJS规范,这时define方法如下:

define(function (require, exports, module) {

var reqModule = require("./someModule");

requModule.test();

exports.asplode = function () {

//someing

}

});

CMD

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

CMD和AMD的区别有以下几点:

1.对于依赖的模块AMD是提前执行,CMD是延迟执行。不过RequireJS从2.0开始,也改成可以延迟执行(根据写法不同,处理方式不通过)。

2.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写法,但依赖前置是官方文档的默认模块定义写法。

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

SeaJS 和 RequireJS的主要区别 在此有解释

时间: 2024-10-13 02:33:12

CommonJS,AMD,CMD区别的相关文章

commonjs amd cmd的区别

一篇博客告诉你三者的区别:http://zccst.iteye.com/blog/2215317 告诉你三者同requirejs seajs的区别:http://blog.chinaunix.net/uid-26672038-id-4112229.html 本人道听途生的: commonjs的规范在node还没有产生以前,就有了,commonjs作为一个后端的规范,虽然后端的Js以前发展缓慢,但是commonjs这个规范还是比较完善的,随着Node的普及,commonjs被完全遵从和实现,com

关于 CommonJS AMD CMD UMD 规范

CommonJS CommonJs是服务器端模块的规范,Node.js采用了这个规范. 根据CommonJS规范,一个单独的文件就是一个模块.加载模块使用require方法,该方法读取一个文件并执行,最后返回文件内部的exports对象. 例如: // foobar.js //私有变量 var test = 123; //公有方法 function foobar () { this.foo = function () { // do someing ... } this.bar = functi

关于 CommonJS AMD CMD UMD 规范的差异总结

一.CommonJS 主要是用于服务器端的规范,比如目前的nodeJS. 根据CommonJS规范,一个单独的文件就是一个模块.每一个模块都是一个单独的作用域,也就是说,在一个文件定义的变量(还包括函数和类),都是私有的,对其他文件是不可见的. // foo.js var request = require('request').default({ timeout: 4000 }); module.exports = function(){ this.re = ''; this.req = fu

commonjs AMD,CMD

CommonJS CommonJs 是服务器端模块的规范,Node.js采用了这个规范. 根据CommonJS规范,一个单独的文件就是一个模块.加载模块使用require方法,该方法读取一个文件并执行,最后返回文件内部的exports对象. 例如: // foobar.js //私有变量 var test = 123; //公有方法 function foobar () { this.foo = function () { // do someing ... } this.bar = funct

关于 CommonJS AMD CMD UMD

1. CommonJS CommonJS 原来叫 ServerJS, 是服务器端模块的规范,Node.js采用了这个规范. 根据CommonJS规范,一个单独的文件就是一个模块.加载模块使用require方法,该方法读取一个文件并执行,最后返回文件内部的exports对象. // foobar.js //私有变量 var test = 123; //公有方法 function foobar () { this.foo = function () { // do someing ... } thi

插件兼容CommonJS, AMD, CMD 和 原生 JS

模块标准 CommonJS CommonJS 有三个全局变量 module.exports 和 require.但是由于 AMD 也有 require 这个全局变量,故不使用这个变量来进行检测. 如果想要对外提供接口的话,可以将接口绑定到 exports (即 module.exports) 上. function MyModule() { // ... } if(typeof module !== `undefined` && typeof exports === `object`) {

CommonJS,AMD,CMD规范

1. Javascript 先天缺乏模块的功能.在其他高级语言中,Java有类文件,Python有import机制,Ruby有require,PHP有include和require,而Javascript 则需要依靠<script>标签引入代码,当脚本多的时候,会显得杂乱无章. 2. 针对以上问题,CommonJS应运而生.CommonJS为Javascript制定了一个美好愿景:能够在任何地方运行!(Not just for browser), CommonJS希望弥补Javascript没

前端模块化小总结—commonJs,AMD,CMD, ES6 的Module

随着前端快速发展,需要使用javascript处理越来越多的事情,不在局限页面的交互,项目的需求越来越多,更多的逻辑需要在前端完成,这时需要一种新的模式 --模块化编程 模块化的理解:模块化是一种处理复杂系统分解为更好的可管理模块的方式.简单来说就是解耦,简化开发,一个模块就是实现特定功能的文件,可以更方便地使用别人的代码,想要什么功能,就加载什么模块.模块开发需要遵循一定的规范 CommonJS规范 CommonJS就是一个JavaScript模块化的规范,是用在服务器端的node的模块规范,

前端模块化方案:CommonJS/AMD/CMD/ES6规范

模块化的开发方式可以提高代码复用率,方便进行代码的管理.通常一个文件就是一个模块,有自己的作用域,只向外暴露特定的变量和函数.目前流行的js模块化规范有CommonJS.AMD.CMD以及ES6的模块系统.前端模块化的演进过程可以看看阮一峰老师的文章.本文主要介绍各规范下的模块化实现方式. 一.CommonJS Node.js是commonJS规范的主要实践者,它有四个重要的环境变量为模块化的实现提供支持:module.exports.require.global.实际使用时,用module.e

CommonJS/AMD/CMD/UMD概念初探

1.CommonJS是一种规范,NodeJS是这种规范的实现. 1.1.CommonJS 加载模块是同步的,所以只有加载完成才能执行后面的操作. 2.AMD是RequireJS在推广过程中对模块定义的规范化产出. 2.1.AMD异步加载模块. 3.CMD是SeaJS在推广过程中对模块定义的规范化产出. 3.1.对于依赖的模块AMD是提前执行,CMD是延迟执行.不过RequireJS从2.0开始,也改成可以延迟执行(根据写法不同,处理方式不通过). 3.2.CMD推崇依赖就近,AMD推崇依赖前置.