AMD、CMD和CommonJS规范
来源:互联网 发布:mac安装office步骤 编辑:程序博客网 时间:2024/05/18 21:42
CommonJS规范
CommonJS是在浏览器环境之外构建JavaScript生态系统为目标产生的项目,比如服务器和桌面环境中。CommonJS规范是为了解决JavaScript的作用域问题而定义的模块形式,
可以使每个模块在它自身的命名空间中执行。该规范的主要内容是:模块必须通过 module.exports导出对外的变量或接口,通过require()来导入其他模块的输出到当前模块。
例子:
// moduleA.jsmodule.exports = function( value ){ return value * 2;}
// moduleB.jsvar multiplyBy2 = require('./moduleA');var result = multiplyBy2(4);
CommonJS是同步加载模块,但其实也有浏览器端的实现,其原理是将所有模块都定义好并通过id进行索引,这样就可以浏览器进行解析了
服务器端的Node.js遵循CommonJS规范。核心思想是允许模块通过require 方法来同步加载所要依赖的其他模块,然后通过 exports或module.exports来导出需要暴露的接口。
require("module");require("../file.js");exports.doStuff = function() {};module.exports = someValue;
优点:
- 服务器端便于重用
- NPM中已经将近20w个模块包
- 简单并容易使用
缺点:
- 同步的模块方式不适合不适合在浏览器环境中,同步意味着阻塞加载,浏览器资源是异步加载的
- 不能非阻塞的并行加载多个模块
详细:http://zhaoda.net/webpack-handbook/module-system.html
http://javascript.ruanyifeng.com/nodejs/module.html#toc4
AMD
AMD规范其实只有一个主要接口 define(id,dependencies,factory),它要在声明模块的时候指定所有的依赖dependencies,并且还要当做形参传到factory中,对于依赖的模块提前执行,依赖前置
define("module", ["dep1", "dep2"], function(d1, d2) { return someExportedValue;});require(["module", "../file"], function(module, file) { /* ... */ });优点:
- 适合在浏览器环境异步加载
- 并行加载多个模块
缺点:
- 提高开发成本,代码阅读和书写比较困难
- 不符合通用的模块思维方式,是一种妥协的实现
详细:http://www.ruanyifeng.com/blog/2012/10/asynchronous_module_definition.html
CMD
define(function(require, exports, module) { var $ = require('jquery'); var Spinning = require('./spinning'); exports.doSomething = ... module.exports = ...})
优点:
- 依赖就近,延迟执行
- 很容易在node中运行
缺点:
- 依赖SPM打包,模块的加载逻辑偏重
实现: SeaJS
0 0
- CommonJS、AMD和CMD规范
- AMD、CMD和CommonJS规范
- js的AMD、CMD和CommonJs规范
- CommonJS,AMD和CMD规范的区别
- JavaScript模块规范:AMD、CMD和CommonJS
- CommonJS和AMD/CMD!
- CommonJS和AMD/CMD!
- 理解AMD ,CMD,CommonJS规范
- 前端amd,cmd,commonJs,规范
- commonjs、amd、cmd、umd规范
- 图解CommonJS、AMD、CMD规范
- CommonJS、AMD和CMD区别
- 弄懂CommonJS和AMD/CMD!
- js-JavaScript规范:CommonJS/AMD/CMD
- Javascript 模块规范 CommonJS ,AMD ,CMD
- ES/CommonJS/AMD/CMD规范简单介绍
- JavaScript模块化规范commonJs、AMD、CMD
- 浅析JS模块规范(CommonJS/AMD/CMD)
- 超齐全的编程开发资源集
- RecyclerView
- centos安装samba
- 带有泛型的类如何继承
- 用来设置标签的流式布局简单设计
- AMD、CMD和CommonJS规范
- Mac 下 Mosquitto 安装和配置 (Mosquitto为开源的mqtt服务器)
- hdu1722 cake
- MySql的Delete、Truncate、Drop分析
- java中JVM的原理
- Strus2 @JSON(serialize=false),过滤不需要的变量
- jenkins报错:java.lang.illegalstateexception already existed will not overwrite with
- Umbraco 官方技术文档 翻译 五、Members 成员
- fdfaseg