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
如果你听过js模块化这个东西,那么你就应该听过或CommonJS或AMD甚至是CMD这些规范咯,我也听过,但之前也真的是听听而已。 现在就看看吧,这些规范到底是啥东西,干嘛的。
详细JS中的模块规范(CommonJS,AMD,CMD
浅析AMD CMD CommonJS规范--javascript模块化加载学习心得总结.docx
CommonJS 用同步的方式加载模块,在服务端,模块文件都存在本地磁盘,读取速度非常快,所以问题不大。ES6 的模块不是对象,import 命令会被 Java
下面小编就为大家分享一篇浅析AMD CMD CommonJS规范--javascript模块化加载学习心得总结。小编觉得写的非常不错,需要的朋友可以过来参考一下
JSModularization 简单介绍JS模块化的几种方式:commonJs、AMD、CMD、ES6等
这是一篇关于javascript模块化AMD,CMD,CommonJS的学习总结,作为记录也给同样对三种方式有疑问的童鞋们,有不对或者偏差之处,望各位大神指出,不胜感激。 本篇默认读者大概知道require,seajs的用法(AMD,CMD用法),...
安装 先决条件: 第1步:安装jspm CLI并在全球范围内投放 npm install - g jspm npm install - g serve 步骤2:安装节点模块和jspm软件包 npm install jspm install 步骤3:启动伺服器 npm run serve ...
动态异步加载“ 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-Require.js- AMD&CMD练习
ES6之前已经出现了js模块加载的方案,最主要的是CommonJS和AMD规范。commonjs主要应用于服务器,实现同步加载,如nodejs。AMD规范应用于浏览器,如requirejs,为异步加载。同时还有CMD规范,为同步加载方案如seaJS。...
前端的模块化规范包括 commonJS、AMD、CMD 和 ES6。其中 AMD 和 CMD 可以说是过渡期的产物,目前较为常见的是commonJS 和 ES6。在 TS 中这两种模块化方案的混用,往往会出现一些意想不到的问题。 二、import * as ...
前言 相信很多人都使用过export、export default、import,然而它们到底有...ES6在语言规格的层面上,实现了模块功能,而且实现得相当简单,完全可以取代现有的CommonJS和AMD规范,成为浏览器和服务器通用的模块解决方
支持AMD,CMD规范,支持依赖注入,支持插件式加载脚本 如果你需要做一个浏览器书签,或者chrome插件,或者第三方组件,对于嵌入到对方网站上的情况, 你不能保证对方是否已经存在有你所依赖的相关库,这样就可能存在...
CommonJS/CMD/AMD引入: var ActionSheet = require('action-sheet'); ES6引入: import ActionSheet from 'action-sheet'; 创建ActionSheet var as = new ActionSheet({ buttons: { '点我': ...
amd与commonjs,cmd 最简单的amd exports vs module.exports in node Chapter 6: dom操作(todo) Chapter 7: 自己动手写一个tab(todo,可参考之前插件做法) Chapter 8: Chapter 9: 处理请求 Chapter 10:
纯函数和副作用函数,AMD CMD CommonJs,module、chunk、bundle有什么区别,vdom优缺点,vmin/vmax 概述(B站为什么使用的是vmin),清除浮动,script标签中的defer等等等。 冲大厂必备,社招必备,已经帮助近百名...
纯函数和副作用函数,AMD CMD CommonJs,module、chunk、bundle有什么区别,vdom优缺点,vmin/vmax 概述(B站为什么使用的是vmin),清除浮动,script标签中的defer等等等。 冲大厂必备,社招必备,已经帮助近百名...