2020-10-10
ES Module
特点:
- 通过给script标签添加 type = module 的方式
- ESM会自动采用严格模式,严格模式下 全局this=undefined 非严格全局this = window
- 每个 ESM 都是运行在单独的私有作用域当中
- ESM 都是通过 CORS 的方式请求外部 JS 模块的,所以必须要服务端支持 CORS
- ESM 的 script 标签会延迟执行脚本 会等待网页渲染完成过后再执行脚本
ES Module 导入导出注意事项:
- export {} 并不是导出一个对象字面量 而是固定语法
- 导出的是数据的指针地址 并不是拷贝一份
- 导出的数据都是常量,在其他模块中不可以修改
import使用规范:
- import后面写的是路径 不能省略.js的后缀
- import相对路径不能省略./ 因为如果是字母开头 ESM 会任务是加载第三方模块去node_modules里找
- 可以用 ./ 开头的相对路径,也可以用 / 开头的绝对路径
- 也可以使用完整的url加载模块 所以可以直接引用CDN上的一些模块
- import必须出现在最顶层 不能出现在if之类的大括号当中
- 可以用 import() 函数动态加载模块 返回的是一个promise
nodejs环境中 ESM与CommenJs:
- ESM中可以导入CJS模块
- CJS中不能导入ESM模块
- CJS始终只会导出一个默认成员,不能导出多个命名成员