LastPoem / Notes

This is a note library
1 stars 0 forks source link

ES6_Module #15

Open LastPoem opened 5 years ago

LastPoem commented 5 years ago

AMD模块

AMD模块是一种非常规范化的模块,只需要两个方法:require和define。

define方法:定义模块

define方法用于定义模块,RequireJS要求每个模块放在一个单独的文件里。 按照是否依赖其他模块,可以分成两种情况讨论。第一种情况是定义独立模块,即所定义的模块不依赖其他模块;第二种情况是定义非独立模块,即所定义的模块依赖于其他模块。

define需要三个参数:模块名,需要依赖的模块,以及回调函数。第一个参数可以省略,此时模块的文件名就是模块名。

require方法:调用模块

require方法用于调用模块。它的参数与define方法类似。 require方法的第一个参数,是一个表示依赖关系的数组。第二个参数是回调函数。可以传入第三个参数,一个用于错误处理的回调函数。

CMD模块

define—–定义

包含三个参数 name: 是一个字符串,表示模块标识; depend: 是一个数组,表示模块的依赖文件列表; constructor: 当此参数是字符串,对象时,返回的接口就是本身。当为函数时,成这个函数为模块的构造函数,执行此函数,得到向外提供的接口。此函数默认接受三个参数:require、exports、module,下文会详细介绍这三个参数分别是什么。

require—–加载

require是一个方法,根据模块标识,获取其他模块提供的接口。 使用方法:

require(name);
//demo
define(function(require){
    var a = require("a");
    a.sayHello();
})

AMD与CMD的区别

CMD 推崇依赖就近,AMD 推崇依赖前置。对于依赖的模块,AMD 是提前执行,CMD 是延迟执行。 AMD 是将需要使用的模块先加载完再执行代码,而 CMD 是在 require 的时候才去加载模块文件,加载完再接着执行。

LastPoem commented 5 years ago

AMD和CMD都是浏览器端的模块。CommonJS就是在服务端的模块。

CommonJS常见规范

  1. 一个文件就是一个模块,拥有单独的作用域
  2. 普通方式定义的 变量、函数、对象都属于该模块内
  3. 通过 require 来加载模块
  4. 通过 exports 和 module.exports 来暴露模块中的内容

导出模块的方式:

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

CommonJS 规范加载模块是同步的,也就是说,只有加载完成,才能执行后面的操作。 AMD规范则是非同步加载模块,允许指定回调函数。 由于 Node.js 主要用于服务器编程,模块文件一般都已经存在于本地硬盘,所以加载起来比较快,不用考虑非同步加载的方式,所以 CommonJS 规范比较适用。 但是,如果是浏览器环境,要从服务器端加载模块,这时就必须采用非同步模式,因此浏览器端一般采用 AMD 规范。

LastPoem commented 5 years ago

ES6的模块化

导出模块的方式:

var firstName = 'Michael';
var lastName = 'Jackson';
var year = 1958;
export {firstName, lastName, year};

引入模块的方式:

import {firstName, lastName, year} from './profile';

注意:浏览器加载 ES6 模块,也使用 Githubissues.

  • Githubissues is a development platform for aggregating issues.