CommonJs
规范
- 一个文件就是一个模块
- 每个模块都有单独的作用域
- 通过module.exports导出成员
- 通过require函数载入模块
CommonJs是以同步模式加载模块,node执行机制是启动时加载模块,执行过程是不需要加载的,只会去使用到模块,所以这种方式在node当中不会有问题。但是换到浏览器端,每次页面加载都是导致大量同步模式请求出现,必然导致效率低下
AMD:RequireJs(异步加载规范)
- AMD使用起来相对复杂
- 模块JS文件请求频繁
CMD:SeaJs(通用模块定义规范)
- CMD规范类似CommonJs规范
ES Modules
基本特性
- 自动采用严格模式,忽略'use strict'
- 每个ESM模块都是单独的私有作用域
- ESM是通过CORS去请求外部JS模块的
- ESM的script标签会延迟(defer)执行脚本