Appearance
原生模块ESM
元信息
- 目标:掌握语言层面的模块化最终答案——ES6 原生 import/export 的浏览器用法,并用 importmap 把模块名与物理地址解耦、实现按名加载
- 关键概念:ESM、export、import、type="module"、importmap、按名加载
- 关联阶段:cp3
- 常见误区:以为 import 可用裸名直接引第三方库(浏览器要求物理地址,裸名须经 importmap 映射);以为模块脚本与普通 script 行为相同(module 默认 defer、自带严格模式与独立作用域);以为需要构建工具才能用 ESM(现代浏览器原生支持)
ESM: ES module
Ecmascript 2015(ES6)中提出了原生的模块化机制 https://caniuse.com/es6-module
javascript
// my_func.js
export function my_func() {
/* function content goes here */
}注意:此处的import语句需要指定所引js文件的具体物理地址,这在复杂场景下,不利于灵活的组织代码
importmap
importmap提供了一个中间层,可以实现按名加载,将物理地址隔离。它让浏览器获得了类似 Node 中"裸模块名 → node_modules 查找"的解析能力——前后端因此可以统一使用 ESM 的 import 按名引入,而各自用不同的机制把名字落到物理地址上。