** 1,AMD规范**
AMD 即 Asynchronous Module Definition,中文名是“异步模块定义”的意思。它是一个在浏览器端模块化开发的规范,AMD 是 RequireJS 在推广过程中对模块定义的规范化产出,所以AMD规范的实现,就是的require.js了
特点 :异步加载,不阻塞页面的加载,能并行加载多个模块,但是不能按需加载,必须提前加载所需依赖
Amd 的规范中定义了两个重要的api
define(id?,[]?,callbakc): //定义声明模块,参数id 模块id标识(可选),参数二是一个数组(可选),依赖其他模块,最后是回调函数
require([module],callback)?/ 加载模块,参数一,是数组,指定加载的模块,参数二回调函数,模块加载完成后执行
还有一个配置属性API:
require.config({
baseUrl: //基本路径
paths:// 对象,对外加载的模块名称 : 键值关系,键:自定义模块名称,值 :文件名或者文件路径(不要写文件后缀.js),可以是字符串,数组(如果第一个加载失败,会加载第二个)
shim://对象,配置非AMD 模式的文件,每个模块要定义(1)exports:值(指在js文件暴露出来的全局变量,如:window.a)(2)deps: 数组,表明该模块的依赖性
})
#2,CMD规范
CMD规范是阿里的玉伯提出来的,实现js库为sea.js。 它和requirejs非常类似,即一个js文件就是一个模块,但是CMD的加载方式更加优秀,是通过按需加载的方式,而不是必须在模块开始就加载所有的依赖。
es6 的module规范
##3,es6 的module规范
ES6 在语言标准的层面上,实现了模块功能,而且非常简单,ES6到来,完全可以取代 CommonJS 和 AMD规范,成为浏览器和服务器通用的模块解决方案。由vue,Angular React这些mvvm 模式的框架发展,让前端的编程变得模块化,组件化。
特点:1. ES6 模块之中,顶层的this指向undefined,即不应该在顶层代码使用this。
2. 自动采用严格模式"use strict"。须遵循严格模式的要求
3. ES6 模块的设计思想是尽量的静态化,编译时加载”或者静态加载,编译时输出接口
4. ES6 模块export、import命令可以出现在模块的任何位置,但是必须处于模块顶层。如果处于块级作用域内,就会报错
5.ES6 模块输出的是值的引用
模块功能主要由两个命令构成:export 和 import。
export:用于规定模块的对外接口,
**export命令除了输出变量,还可以输出函数或类(class),不同的数据类型
import:用于输入其他模块提供的功能。
**使用export命令定义了模块的对外接口以后,其他 JS 文件就可以通过import命令加载这个模块。