1、CommonJS:运行时确定模块间的依赖关系
用于服务器,对象就是模块,输出的是值的缓存,不存在动态更新。
2、AMD:运行时确定模块间的依赖关系
用于浏览器中。
3、ES6的模块加载方案:设计思想是尽量静态化,使得编译时就能确定模块间的依赖关系,静态优化, 静态分析(例如宏和类型检验只能靠静态分析实现)
浏览器通用解决方案,模块不是对象。
export: 输出的是接口,不是值。
1 | export 1; // error |
import: 输入的是只读接口,编译阶段执行,在代码运行之前,所以不允许使用表达式和变量。Singleton 模式,多次加载只会执行一次import语句。
1 | console.log(a) |
export default: 本质上是输出了一个名字叫default的变量
export 与 import 复合写法
1 | export { a, b } from 'util' // 相当于对外转发了a,b这俩个接口,在当前模块中并没有导入这俩个变量。 |
UMD模块格式:
静态编译: