规范一 commonJs:用于服务器端(产品有NodeJs、browserify等)。
javascript
复制代码
// 导入
var bjs = require("b.js")
// 导出
module.exports = function() {}
规范二 AMD:用于浏览器端,是异步的(产品有requireJs、jQuery、AngularJS、Dojo)。
- AMD和RequireJS:RequireJS 是一个前端的模块化管理的工具库,遵循AMD规范。
- AMD规范定义了一个自由变量或者说是全局变量 define 的函数。
javascript
复制代码
define( id?, dependencies?, factory );
第一个参数 id 为字符串类型,表示了模块标识,为可选参数。若不存在则模块标识应该默认定义为在加载器中被请求脚本的标识。如果存在,那么模块标识必须为顶层的或者一个绝对的标识。
第二个参数,dependencies ,是一个当前模块依赖的,已被模块定义的模块标识的数组字面量。
第三个参数,factory,是一个需要进行实例化的函数或者一个对象。
规范三 CMD:用于浏览器端,是异步的(产品有Sea.js、Vue) 。
- 对于依赖的模块,AMD 是提前执行,CMD 是延迟执行。不过 RequireJS 从 2.0 开始,也改成可以延迟执行(根据写法不同,处理方式不同)。CMD 推崇 as lazy as possible.
- CMD 推崇依赖就近,AMD 推崇依赖前置。
四 UMD:通用模块
- 用于在实际运行时探测用户实际使用的是 AMD 规范模块还是 CommonJS 规范模块。
五 ES6 Modules(Es6模块化语法,现在是大趋势):
javascript
复制代码
// 导入
import { time } from "./counter.mjs"
// 导出
export var time = 0