1. CommonJS
- 社区标准
- 使用函数实现的
- 仅支持node环境
- 动态依赖(需要代码运行后才能确定依赖)
- 动态依赖是同步执行的
- 之有普通函数的调用和赋值
2. ES Module
- 官方标准
- 使用了新的语法
- 所有环境都支持
- 支持静态依赖和动态依赖
- 静态依赖:在代码运行前就要确定依赖
- 动态依赖是异步的
- 符号绑定
CMJ是社区标准, ESM是官方标准 CMJ是使用API实现的模块化,ESM是使用新的语法实现的模块化 CMJ仅在node环境中支持, ESM各种环境都支持 CMJ是动态依赖, 同步执行, ESM即支持动态依赖, 也支持静态, 动态依赖是异步执行的 ESM导入时有符号绑定,CMJ只是普通函数的调用和赋值
export 和export default的区别
export 为普通导出又叫做具名导出, 顾名思义, 他的导出必须带有命名, 比如变量定义, 函数定义这种带有命名的语句。在导出模块对象中, 命名为模块对象的属性名, 在一个模块中可以有多个具名导出 export default 为默认导出, 在模块对象中名称为固定为default, 因此无须命名,通常为一个表达式或者字面量, 在一个模块中只能有一个默认导出