模块规范
CommonJS/AMD/UMD/ES6 Module 这四种模块规范
CommonJS 规范定义了模块应该怎样进行编写,从而各个模块系统之间可以进行相互操作。
CommonJS 不支持异步加载,因此异步模块定义(AMD)主要为了解决异步加载模块而提出。
通用模块定义(UMD)模式用于兼容 AMD 和 CommonJS 的规范。
CommonJS 规范用于运行时进行模块加载,ES6 模块化可以在编译阶段确定各个模块之间的依赖关系。
# Commonjs
特点
- 一个文件就是一个模块
- 使用 require 载入模块,使用 module.exports 输出模块,因此各个模块间可以进行交互
- 不支持异步加载
主要是 nodejs 使用的规范
# AMD
异步定义模块,主要就是为了解决异步加载模块而提出
Requirejs 就是 AMD 的实现
# UMD
兼容 AMD 和 Commonjs,并且支持了传统的全局变量模式
# ES6
相比于运行时
进行加载的 CommonJS 规范,ES6 模块化主要是为了在编译阶段
就可以确定各个模块之间的依赖关系
特点
- 使用 es6 加载 export 导出
- 一个模块只会加载一次(Commonjs 也是一样)
- 导出的模块为变量引用,因此可以在内存中共享
大部分是用 es6 模块,因为我们编译的时候需要使用 babel、webpack 等方式构建依赖树
es6 有兼容性问题,因此需要使用 babel 编译,以及 webpack 打包
CommonJS 导入的是导出值的拷贝,但导出值变化时,到导入值不会改变;而 ES6 Module 则是动态映射,会随着导出值的改变而变
编辑 (opens new window)
上次更新: 2024/11/29, 10:10:04