- 浏览: 42607 次
- 性别:
- 来自: 深圳
最新评论
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 3651,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 917JavaScript中的对象属性有两种: 一,数据 ... -
JavaScript闭包
2019-01-17 12:02 0要想真正理解闭包首先要先搞清楚作用域和作用域链。 1,作 ... -
常用收藏
2019-01-16 11:11 321参考链接 MongoDB用户权限管理 https:/ ... -
浏览器中进程与线程
2019-01-05 18:06 1179一,首先使用快捷键Shift+Esc打开浏览器Chrome任 ... -
Flex
2018-12-30 15:42 9162009年,W3C提出了一种新的布局方式:Flex布局。 ... -
linux下建立git仓库
2018-12-28 14:51 523参考文件 https://www.cnblogs.com/ ... -
Express中异常处理
2018-12-26 17:36 1253下面内容摘自网络文章,分析的很全面。 文章地址:http ... -
Express中如何使用async/await
2018-12-26 15:31 1214随着Node.js v7.6.0版本开 ... -
查看端口占用
2018-10-09 23:27 469参考:https://www.jianshu.com/p/ ... -
GIt部署到linux服务器
2018-09-30 12:01 910git一键部署代码到远程 ... -
JavaScript中常见继承方式
2018-09-14 18:16 533JavaScript作为弱类型语言,继承也是其强大的特性之 ... -
Node.js版本管理工具nvm
2018-09-09 10:52 562nvm是什么? 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 352----------------------------- ...
相关推荐
《模块化系列》彻底理清 AMD,CommonJS,CMD,UMD,ES6
如果你听过js模块化这个东西,那么你就应该听过或CommonJS或AMD甚至是CMD这些规范咯,我也听过,但之前也真的是听听而已。 现在就看看吧,这些规范到底是啥东西,干嘛的。
详细JS中的模块规范(CommonJS,AMD,CMD
动态异步加载“ CommonJS ”和“ umd”和“ amd”,“ cmd”和“ ES”和'json'模块6合一 非常简洁小巧的工具,基于Promise 基于fetch ,加载的模块如果不同域,则必须支持跨域请求,因为要使用模块的源代码来生成...
浅析AMD CMD CommonJS规范--javascript模块化加载学习心得总结.docx
CommonJS 用同步的方式加载模块,在服务端,模块文件都存在本地磁盘,读取速度非常快,所以问题不大。ES6 的模块不是对象,import 命令会被 Java
umd-lib 只是一个使用 UMD 的小模块,它公开了 AMD 和 CommonJS 接口。 我们正在使用 browserify 将这个非常小的库和他的依赖项捆绑到一个同时公开 AMD 和 CommonJS 的 bundle.js 中。 这是我们用于创建包的命令: ...
babel-plugin-transform-amd-to-commonjs 将 AMD 转换为 CommonJS 的 Babel 插件。 ,它使用这个插件来允许同步require AMD 模块。 用法 npm install --save-dev babel-plugin-transform-amd-to-commonjs 将转换...
下面小编就为大家分享一篇浅析AMD CMD CommonJS规范--javascript模块化加载学习心得总结。小编觉得写的非常不错,需要的朋友可以过来参考一下
JSModularization 简单介绍JS模块化的几种方式:commonJs、AMD、CMD、ES6等
这是一篇关于javascript模块化AMD,CMD,CommonJS的学习总结,作为记录也给同样对三种方式有疑问的童鞋们,有不对或者偏差之处,望各位大神指出,不胜感激。 本篇默认读者大概知道require,seajs的用法(AMD,CMD用法),...
将CommonJS(CJS)模块转换为UMD和ESM格式。 概述 Moduloze支持以Node.js生态系统固有的CommonJS(CJS)格式创作JS模块,并将这些模块转换为通用模块定义(UMD)和ES模块(ESM)格式。 UMD在尚未在应用程序中使用...
扩展的EXTJS公共类,扩展的EXTJS公共类,扩展的EXTJS公共类
安装 先决条件: 第1步:安装jspm CLI并在全球范围内投放 npm install - g jspm npm install - g serve 步骤2:安装节点模块和jspm软件包 npm install jspm install 步骤3:启动伺服器 npm run serve ...
扩展的EXTJS公共类,扩展的EXTJS公共类,扩展的EXTJS公共类
扩展的EXTJS公共类,扩展的EXTJS公共类,扩展的EXTJS公共类
扩展的EXTJS公共类,扩展的EXTJS公共类,扩展的EXTJS公共类
连接-commonjs-amd 一个连接中间件,帮助您在 CommonJS 中编写前端 JavaScript,但将其作为 AMD 模块运行。安装这是一个简单的 npm 模块,因此您可以使用 npm 安装它, $ npm install connect-commonjs-amd 或者,您...
1. 模块代码只会在模块作用域中运行,防止了全局作用域的污染 2. 并且模块的代码可以多次加载,但是需要注意的是只有在第一次运行时会加载并缓存,之后运行则会调用