Commonjs规范
1.从node库中引入模块,var math=require('math');即可
2.从非node库中引入模块,var math=require('./math');即可
3.exports导出模块,{}内部写方法
4.同步加载
AMD规范
1.用define方法定义模块
2.require调用模块
3.异步加载
ES6中模块机制
1.标准使用import引入模块
2.import放在文件最开始,编译阶段执行的
3.import中不能含有表达式或者变量,无法实现动态加载,语法上条件加载无法实现
区别
CommonJS 模块输出的是一个值的拷贝,ES6 模块输出的是值的引用。
CommonJS 模块是运行时加载,ES6 模块是编译时输出接口
ES6 模块的运行机制与 CommonJS 不一样。JS 引擎对脚本静态分析的时候,遇到模块加载命令import,就会生成一个只读引用。等到脚本真正执行时,再根据这个只读引用,到被加载的那个模块里面去取值。换句话说,ES6 的import有点像 Unix 系统的“符号连接”,原始值变了,import加载的值也会跟着变。因此,ES6 模块是动态引用,并且不会缓存值,模块里面的变量绑定其所在的模块。