AMD
AMD,全称是Asynchronous Module Definition,即异步模块加载机制。后来由该草案的作者以RequireJS实现了AMD规范,所以一般说AMD也是指RequireJS。
RequireJs基本用法
通过define定义一个模块,使用require导入定义的模块
特点:依赖前置,提前执行
CMD
CMD是SeaJS在推广过程中生产的对模块定义的规范,在Web浏览器端的模块加载器中,SeaJS与RequireJS并称
SeaJs基本用法
特点:依赖就近,延迟执行
CommonJS
CommonJS规范为CommonJS小组所提出,目的是弥补JavaScript在服务器端缺少模块化机制,NodeJS、webpack都是基于该规范来实现的。
commenJs基本用法
解析:
注:不能直接对exports进行赋值,exports和module.exports共享一个地址
特点:
1、所有代码都运行在模块作用域,不会污染全局作用域;
2、模块加载是同步的,即只有加载完成,才会往下执行
3、模块在首次加载后会缓存,再次加载只会返回缓存的结果
4、require返回的值是被输出值的拷贝,模块内部的变化不会影响该值
Module
ES6 Module是ES6中规定的模块体系,相比上面提到的规范, ES6 Module有更多的优势,有望成为浏览器和服务器通用的模块解决方案。
module基本用法
module特点(对比commonJs)
1、commonJs是运行时加载,module是编译时输出接口
2、commonJs是输出模块,将所有的接口全部加载进来,module可以单独加载其中某个接口
3、commonJs输出的是值的拷贝,module输出的是值的引用,被输出的模块内部的改变会影响引用的改变
4、commonJs的this指向当前模块,module的this指向undefined