AMD / CMD / ES6 / CommonJS
一、AMD
AMD是requireJS推广过程中对模块定义的规范化输出,(Asynchronous Module Definition)异步模块定义,模块的加载不影响它后面语句的执行,所以依赖此模块的语句,都得在回调函数中执行。AMD采用require语句加载模块,需要两个参数
举例:require(['math'],function(math){math.add(2,3)});
requireJS就是AMD规范,是依赖前置、异步定义的框架define([module],function(module){...})
关键字:依赖前置、异步、回调
二、CMD
CMD是seaJS推广过程中对模块定义的规范化输出,(Common Module Definition)通用模块定义,在CMD规范中,一个文件就是一个模块,用define定义模块
举例:define(require,export,module){}
CMD是依赖就近,在什么地方使用到插件就在什么地方require该插件,即用即返,这是一个同步的概念
三、CommonJS
node.js的模块系统,就是参照CommonJS规范实现的。在CommonJS中,有一个全局性方法require(),用于加载模块;在前端浏览器里面并不支持module.exports,通过node.js后端使用的,
导出时都是值拷贝,就算导出的值变了,导入的值也不会改变,所以如果想更新值,必须重新导入一次,加载模块是同步的。
module.export跟exports的区别
module.exports 方法还可以单独返回一个数据类型(String、Number、Object...),而 exports 只能返回一个 Object 对象
所有的 exports 对象最终都是通过 module.exports 传递执行,因此可以更确切地说,exports 是给 module.exports 添加属性和方法
四、ES6
模块化---export/import对模块进行导出导入的
采用静态编译,使得编译时就能确定模块的依赖关系,以及输入和输出的变量,不支持动态导入,采用实时绑定的方式,导入导出的值都指向同一个内存地址,所以导入值会跟随导出值变化。
五、export和export default的区别
1、 export/import可以有多个,export default只有一个;
2、通过export方式导出,在导入时需要加{},export default不需要
3、export能导出变量/表达式,export default不可以
4、 export与export default均可用于导出常量/函数/文件/模块等
六、module.export跟exports的区别(node commonJS规范)
module.exports和exports指向同一个内存地址、文件最终导出的是module.export的文件地址。如果擅自改动exports的指向,那exports导出的东西。import的时候是拿不到的。