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的主要区别 在此有解释
分享到:
相关推荐
《模块化系列》彻底理清 AMD,CommonJS,CMD,UMD,ES6
以上介绍的三种模块规范——**CommonJS**、**AMD** 和 **CMD**,各有侧重,适用于不同的场景。CommonJS主要用于服务器端的开发,而AMD和CMD则更适合于浏览器端的开发。随着ES6标准中模块的支持,这些规范的重要性...
### JS中的模块规范(CommonJS, AMD, CMD) #### 一、CommonJS CommonJS 是一种模块化标准,最初被设计用于服务器端JavaScript环境,特别是针对Node.js这样的平台。CommonJS 的核心理念是允许开发者将代码组织成独立...
### 浅析AMD、CMD与CommonJS规范——JavaScript模块化加载学习心得总结 #### 一、引言 在现代Web开发中,随着项目规模的不断扩大和技术复杂度的提高,JavaScript模块化成为了一种非常重要的编程实践。通过将复杂的...
CommonJS 用同步的方式加载模块,在服务端,模块文件都存在本地磁盘,读取速度非常快,所以问题不大。ES6 的模块不是对象,import 命令会被 Java
AMD、CMD和CommonJS是三种流行的JavaScript模块化规范,它们各自有着不同的特点和使用场景。 CommonJS规范主要是在服务器端JavaScript环境中使用的,比如Node.js,它支持同步加载模块。根据CommonJS规范,一个单独...
CMD与AMD的主要区别在于依赖解析时机,CMD更倾向于按需加载,减少了预加载的需求,降低了模块间的耦合。 总的来说,CommonJS更适合服务器端,AMD适用于浏览器环境的异步加载,而CMD则是对AMD的一种优化,更注重代码...
在JavaScript的发展过程中,出现了多种模块化规范和标准,包括CommonJS、AMD(Asynchronous Module Definition)、CMD(Common Module Definition)以及ES6的模块系统。以下是对这些模块化方式的详细讲解: 1. **...
安装 先决条件: 第1步:安装jspm CLI并在全球范围内投放 npm install - g jspm npm install - g serve 步骤2:安装节点模块和jspm软件包 npm install jspm install 步骤3:启动伺服器 npm run serve ...
4. **AMD与CMD的区别**: - AMD更强调并行加载和依赖管理,适合大型复杂项目,尤其是有多个外部库和模块需要加载的情况。 - CMD则更倾向于保持代码的自然顺序,依赖就近,更符合JavaScript的编程习惯,适合小型到...
为了解决这一问题,出现了多种模块化方案,包括CommonJS、AMD、CMD等,最终ES6模块化方案成为了一种广泛接受的标准。 #### 三、CommonJS与ES6模块的主要区别 ##### 1. 输出方式的不同 - **CommonJS**: - 其模块...
动态异步加载“ CommonJS ”和“ umd”和“ amd”,“ cmd”和“ ES”和'json'模块6合一 非常简洁小巧的工具,基于Promise 基于fetch ,加载的模块如果不同域,则必须支持跨域请求,因为要使用模块的源代码来生成...
gulp-vue-module *.vue组件文件的Gulp插件符合AMD / CMD / CommonJS模块。 现在,您可以使用 / ...等。前端模块加载器加载Vue组件,而不使用和 。用法$ npm install gulp-vue-module --save-dev Gulpfile.js : var ...
总结一下AMD和CMD的主要区别: 1. 依赖执行时机:AMD通常在定义时执行依赖,CMD则是延迟执行,按需加载。 2. 依赖声明方式:AMD在`define`中显式声明依赖,CMD使用`require`在工厂函数内部引入依赖。 3. 社区支持:...
CMD相比于AMD,更加接近CommonJS的写法,但在浏览器环境中的实现是异步的。sea.js也提供了类似的`config`方法来处理非CMD模块,类似于require.js的`shim`。 总的来说,AMD和CMD在模块化开发中各有优势。AMD更适用于...
ES6之前已经出现了js模块加载的方案,最主要的是CommonJS和AMD规范。commonjs主要应用于服务器,实现同步加载,如nodejs。AMD规范应用于浏览器,如requirejs,为异步加载。同时还有CMD规范,为同步加载方案如seaJS。...
这个项目基于CMD(Common Module Definition)规范,CMD是JavaScript模块化的一种实现,类似于AMD(Asynchronous Module Definition),但更侧重于同步加载。 CMD-build的核心功能在于模块打包和转换,它能够处理...
- 查看库是否已经使用了AMD(Asynchronous Module Definition)或者CommonJS等其他模块化方案,如果有,转换起来会相对容易些。 3. **将全局变量转化为模块** - 全局变量通常是CMD改造的主要目标,将其封装到`...
CMD是Sea.js 推出的一种模块化解决方案,与AMD(Asynchronous Module Definition)规范并行存在,但更倾向于按需加载,减少对整体性能的影响。 Grunt是广受欢迎的JavaScript任务运行器,它允许开发者自动化一系列...