Node12 AMD、CMD、UMD
重新学习Node,整理以前的日志。AMD/CMD/UMD学习笔记。
AMD
AMD 是”Asynchronous Module Definition”的缩写,意思就是”异步模块定义”,也是由RequireJS定义的模块形式。
它采用异步方式加载模块,模块的加载不影响它后面语句的运行。所有依赖这个模块的语句,都定义在一个回调函数中,等到加载完成之后,这个回调函数才会运行。
定义模块
1 | // 文件名: foo.js |
定义的第一个部分是一个依赖数组,第二部分是回调函数,只有当依赖的组件可用时回调函数才会执行。
加载模块
1 | require(['foo'], function(foo) { |
CommonJS
Node.js的模块和包机制的实现参照了CommonJS的标准,但并未完全遵循。不过两者的区别不大。
CommonJS规范加载模块是同步的,也就是说,只有加载完成,才能执行后面的操作。
定义模块
在CMD规范中,一个模块就是一个文件。define
是一个全局函数,用来定义模块。
define
接受factory
参数,factory
可以是一个函数,也可以是一个对象或字符串。
比如可以定义一个JSON数据模块:
1 | define({"foo": "bar"}); |
factory
是一个函数,有三个参数,function(require, exports, module)
require
是一个方法,接受模块标识作为唯一参数,用来获取其他模块提供的接口:require(id)
exports
是一个对象,用来向外提供模块接口module
是一个对象,上面存储了与当前模块相关联的一些属性和方法
1 | define(function(require, exports, module) { |
NodeJS中
1 | // 文件名: foo.js |
UMD通用模块规范
UMD是AMD和CommonJS的糅合。
1 | ((root, factory) => { |
更详细的内容看这个教程。