- 浏览: 44931 次
- 性别:
- 来自: 深圳
最新评论
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('./foobar').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的主要区别 在此有解释
UMD
umd是AMD和CommonJS的糅合
AMD 浏览器第一的原则发展 异步加载模块。
CommonJS 模块以服务器第一原则发展,选择同步加载,它的模块无需包装(unwrapped modules)。
这迫使人们又想出另一个更通用的模式UMD (Universal Module Definition)。希望解决跨平台的解决方案。
UMD先判断是否支持Node.js的模块(exports)是否存在,存在则使用Node.js模块模式。
在判断是否支持AMD(define是否存在),存在则使用AMD方式加载模块。
(function (window, factory) {
if (typeof exports === 'object') {
module.exports = factory();
} else if (typeof define === 'function' && define.amd) {
define(factory);
} else {
window.eventUtil = factory();
}
})(this, function () {
//module ...
});
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('./foobar').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的主要区别 在此有解释
UMD
umd是AMD和CommonJS的糅合
AMD 浏览器第一的原则发展 异步加载模块。
CommonJS 模块以服务器第一原则发展,选择同步加载,它的模块无需包装(unwrapped modules)。
这迫使人们又想出另一个更通用的模式UMD (Universal Module Definition)。希望解决跨平台的解决方案。
UMD先判断是否支持Node.js的模块(exports)是否存在,存在则使用Node.js模块模式。
在判断是否支持AMD(define是否存在),存在则使用AMD方式加载模块。
(function (window, factory) {
if (typeof exports === 'object') {
module.exports = factory();
} else if (typeof define === 'function' && define.amd) {
define(factory);
} else {
window.eventUtil = factory();
}
})(this, function () {
//module ...
});
发表评论
-
ES6 Array常用Api详解
2019-05-06 11:41 4091,Array.of Array.of方法用于将一组值, ... -
JavaScript基础
2019-03-23 21:23 01,数据类型 在JavaScri ... -
gulp
2019-03-21 10:25 0正则路径 https://blog.csdn.net/wi ... -
vue声明周期
2019-02-25 21:51 0vue -
Vue生命周期 VS React生命周期
2019-01-29 11:12 0Vue生命周: beforeCreate: c ... -
JavaScript 对象属性
2019-01-23 10:57 957JavaScript中的对象属性有两种: 一,数据 ... -
JavaScript闭包
2019-01-17 12:02 0要想真正理解闭包首先要先搞清楚作用域和作用域链。 1,作 ... -
常用收藏
2019-01-16 11:11 362参考链接 MongoDB用户权限管理 https:/ ... -
浏览器中进程与线程
2019-01-05 18:06 1227一,首先使用快捷键Shift+Esc打开浏览器Chrome任 ... -
Flex
2018-12-30 15:42 9522009年,W3C提出了一种新的布局方式:Flex布局。 ... -
linux下建立git仓库
2018-12-28 14:51 574参考文件 https://www.cnblogs.com/ ... -
Express中异常处理
2018-12-26 17:36 1335下面内容摘自网络文章,分析的很全面。 文章地址:http ... -
Express中如何使用async/await
2018-12-26 15:31 1270随着Node.js v7.6.0版本开 ... -
查看端口占用
2018-10-09 23:27 540参考:https://www.jianshu.com/p/ ... -
GIt部署到linux服务器
2018-09-30 12:01 960git一键部署代码到远程 ... -
JavaScript中常见继承方式
2018-09-14 18:16 568JavaScript作为弱类型语言,继承也是其强大的特性之 ... -
Node.js版本管理工具nvm
2018-09-09 10:52 604nvm是什么? nvm允许你在同一台机器上安装不同版 ... -
字符编码的发展历史
2018-09-08 09:52 0字符编码的发展历史 Unicode和UTF-8有何区别? ... -
nodejs-buffer
2018-09-07 18:13 0公所周知JavaScript语言不能处理二进制数据,但在服务 ... -
Git学习笔记
2018-09-04 18:07 387----------------------------- ...
相关推荐
《模块化系列》彻底理清 AMD,CommonJS,CMD,UMD,ES6
动态异步加载“ CommonJS ”和“ umd”和“ amd”,“ cmd”和“ ES”和'json'模块6合一 非常简洁小巧的工具,基于Promise 基于fetch ,加载的模块如果不同域,则必须支持跨域请求,因为要使用模块的源代码来生成...
这个项目基于CMD(Common Module Definition)规范,CMD是JavaScript模块化的一种实现,类似于AMD(Asynchronous Module Definition),但更侧重于同步加载。 CMD-build的核心功能在于模块打包和转换,它能够处理...
在前端发展到今天,已经有不少模块化的方案,比如 CommonJS、AMD、CMD、UMD 等。这些模块化规范的核心价值都是让 JavaScript 的模块化开发变得简单和自然。 二、CommonJS CommonJS 是服务器端模块的规范,Node.js ...
UMD格式的文件通常用于库和插件,使得它们能够在各种模块加载环境中正常工作,无论是在浏览器的全局作用域、CMD(Common Module Definition)或者AMD环境中。 UMDParser是一个专门用于解析和分析这种格式的工具,...
4. **UMD(Universal Module Definition)**:UMD是一种兼容多种模块化规范的模式,可以在CommonJS、AMD和全局变量环境中运行,常用于库和插件。 5. **ES6模块化**:ECMAScript 6引入了原生的模块系统,使用`import...
JavaScript 模块大战源于语言发展过程中为解决代码组织和复用...CommonJS、AMD、CMD 和 UMD 是历史阶段的产物,而 ES6 模块则是当前的标准。开发者需要根据项目需求选择合适的模块化方案,以便更好地组织和管理代码。
amd/cmd/umd amd define( // 模块名 'alpha', ['require', 'exports', 'beta'], function (require, exports, beta) { exports.verb = function() { return beta.verb() } } ) cmd 尽可能懒执行 define...
2. **模块化与AMD/CMD**:CommonJS、AMD和CMD是JavaScript模块化的三种主要规范。CommonJS适用于服务器端,AMD(异步模块定义)用于浏览器环境,CMD(命令式模块定义)则是Sea.js和RequireJS等推崇的模式。UMD(通用...
CommonJS UMD Grunt Gulp Webpack Git Svn 雅虎24法则 More 稳定性 响应式 搜索SEO 排序 搜索 动态规划 二叉树 二叉树 二叉堆 从浏览器地址栏输入url到显示页面的步骤(以HTTP为例) 原生AJAX 深浅复制 跨域方式 ...
3. **模块化**:CommonJS、AMD和CMD是JavaScript中的模块化规范,其中CMD推崇懒执行,AMD推崇预执行。UMD用于兼容多种规范,Webpack则能封装和管理模块。`$.fn.method`是jQuery扩展插件的常见方式,而ES6的模块导入...
- **CMD与AMD的区别**: CMD按需加载,AMD预加载所有依赖。 **9. LoadJs模块化加载** - **原理与实现**: 通过动态创建`<script>`标签来按需加载JavaScript文件。 - **加载失败处理**: 可以设置超时时间,并提供...
3. **AMD/CMD兼容**:`client-require`也可以与RequireJS或Sea.js等其他模块加载器进行互操作,以适应不同的前端模块化需求。 通过`client-require`,前端开发者可以在浏览器环境中享受到类似于Node.js的模块化开发...