AMD与CMD区别

随笔:因为最近楠哥学习欲望非常之强烈啊,各种百度,博客,于是就有了这篇小简文的产生,于是,就简单介绍了下区别,作为暂时的学习吧。后期再补充。就酱...

CommonJS

我们先从CommonJS谈起,因为在网页端没有模块化编程只是页面JavaScript逻辑复杂,但也可以工作下去,在服务器端却一定要有模块,所以虽然JavaScript在web端发展这么多年,第一个流行的模块化规范却由服务器端的JavaScript应用带来,CommonJS规范是由NodeJS发扬光大,这标志着JavaScript模块化编程正式登上舞台。

1、定义模块 
根据CommonJS规范,一个单独的文件就是一个模块。每一个模块都是一个单独的作用域,也就是说,在该模块内部定义的变量,无法被其他模块读取,除非定义为global对象的属性

2、模块输出: 
模块只有一个出口,module.exports对象,我们需要把模块希望输出的内容放入该对象

3、加载模块: 
加载模块使用require方法,该方法读取一个文件并执行,返回文件内部的module.exports对象。

AMD

AMD 即Asynchronous Module Definition,中文名是异步模块定义的意思。它是一个在浏览器端模块化开发的规范

由于不是JavaScript原生支持,使用AMD规范进行页面开发需要用到对应的库函数,也就是大名鼎鼎RequireJS,实际上AMD 是 RequireJS 在推广过程中对模块定义的规范化的产出

requireJS主要解决两个问题

1、多个js文件可能有依赖关系,被依赖的文件需要早于依赖它的文件加载到浏览器 
2、js加载的时候浏览器会停止页面渲染,加载文件越多,页面失去响应时间越长 

CMD

CMD 即Common Module Definition通用模块定义,CMD规范是国内发展出来的,就像AMD有个requireJS,CMD有个浏览器的实现SeaJS,SeaJS要解决的问题和requireJS一样,只不过在模块定义方式和模块加载(可以说运行、解析)时机上有所不同 
语法 
Sea.js 推崇一个模块一个文件,遵循统一的写法 
define(id?, deps?, factory) 
因为CMD推崇

  1. 一个文件一个模块,所以经常就用文件名作为模块id
  2. CMD推崇依赖就近,所以一般不在define的参数中写依赖,在factory中写

factory是一个函数,有三个参数,function(require, exports, module)

    1. require 是一个方法,接受 模块标识 作为唯一参数,用来获取其他模块提供的接口:require(id)
    2. exports 是一个对象,用来向外提供模块接口
    3. module 是一个对象,上面存储了与当前模块相关联的一些属性和方法

 

posted @ 2017-05-08 01:10  楠歌生南国  阅读(117)  评论(0)    收藏  举报