各种引用方式
CJS,AMD,UMD,ESM
CJS
CommonJs
1 | //importing |
- 常用于
node
中 - 引入模块是同步的
- 使用
CJS
引入会得到被引入对象的拷贝 - 不能用于浏览器
AMD
Asynchronous Module Definition
1 | define(['dep1', 'dep2'], function (dep1, dep2) { |
- 异步引入模块
- 为了前端使用而提出的
- 不如
CJS
简便
UMD
Universal Module Definition
1 | (function (root, factory) { |
- 前后端均能用
- 与
CJS
和·AMD
不同,UMD
更像是一种配置几种模块引用的模式。更多模式 UMD
通常被用作打包工具的回调模块
ESM
ES Modules,Javascipt 提出的标准的模块系统
1 | import React from 'react'; |
- 运行在现代浏览器中
- 同事具备
CJS
的简单语法和AMD
的异步引入 - 支持Trer-shakealbe,基于ES6的static module structure特性
- 支持打包工具移除不必要的代码,使网站加载更少的代码来减少加载速度
- 可以在HTML中使用
- 但并不是所有浏览器都支持(具体)
总结
- ESM是最好用的,它语法简单,异步加载并且支持
tree-shake
- UMD可以运行在任何环境,并且如果ESM不支持的话可以用于回调
- CJS同步加载对后端友好
- AMD异步加载对前端友好