Open LastPoem opened 5 years ago
AMD和CMD都是浏览器端的模块。CommonJS就是在服务端的模块。
导出模块的方式:
var add = function(x, y) {
return x + y;
};
module.exports.add = add;
引入模块的方式:
var add = require('./add.js');
console.log(add.add(1, 1));
CommonJS 规范加载模块是同步的,也就是说,只有加载完成,才能执行后面的操作。 AMD规范则是非同步加载模块,允许指定回调函数。 由于 Node.js 主要用于服务器编程,模块文件一般都已经存在于本地硬盘,所以加载起来比较快,不用考虑非同步加载的方式,所以 CommonJS 规范比较适用。 但是,如果是浏览器环境,要从服务器端加载模块,这时就必须采用非同步模式,因此浏览器端一般采用 AMD 规范。
导出模块的方式:
var firstName = 'Michael';
var lastName = 'Jackson';
var year = 1958;
export {firstName, lastName, year};
引入模块的方式:
import {firstName, lastName, year} from './profile';
注意:浏览器加载 ES6 模块,也使用 Githubissues.
AMD模块
AMD模块是一种非常规范化的模块,只需要两个方法:require和define。
define方法:定义模块
define方法用于定义模块,RequireJS要求每个模块放在一个单独的文件里。 按照是否依赖其他模块,可以分成两种情况讨论。第一种情况是定义独立模块,即所定义的模块不依赖其他模块;第二种情况是定义非独立模块,即所定义的模块依赖于其他模块。
define需要三个参数:模块名,需要依赖的模块,以及回调函数。第一个参数可以省略,此时模块的文件名就是模块名。
require方法:调用模块
require方法用于调用模块。它的参数与define方法类似。 require方法的第一个参数,是一个表示依赖关系的数组。第二个参数是回调函数。可以传入第三个参数,一个用于错误处理的回调函数。
CMD模块
define—–定义
包含三个参数 name: 是一个字符串,表示模块标识; depend: 是一个数组,表示模块的依赖文件列表; constructor: 当此参数是字符串,对象时,返回的接口就是本身。当为函数时,成这个函数为模块的构造函数,执行此函数,得到向外提供的接口。此函数默认接受三个参数:require、exports、module,下文会详细介绍这三个参数分别是什么。
require—–加载
require是一个方法,根据模块标识,获取其他模块提供的接口。 使用方法:
AMD与CMD的区别
CMD 推崇依赖就近,AMD 推崇依赖前置。对于依赖的模块,AMD 是提前执行,CMD 是延迟执行。 AMD 是将需要使用的模块先加载完再执行代码,而 CMD 是在 require 的时候才去加载模块文件,加载完再接着执行。