【笔记】通过ESModule规范实现JS模块化
前言
通过ESModule规范实现JS模块化
模块的导入和导出
- 通过
export关键字导出,通过import关键字导入- 导出时指定的不是对象,只是结构看起来像一个对象
- 导入时必须指定文件扩展名
- 必须通过WebServer访问,而不能直接通过本地文件访问,否则会报跨域错误
- 默认使用严格模式(
usr strict)
1 | const obj = {}; |
1 | import { obj, fn } from "./demo.js"; |
1 | <script src="demo.js" type="module"></script> |
在Script标签内导入模块
1 | const obj = {}; |
1 | <script src="demo.js" type="module"></script> |
在代码内按需导入
- 通过
import关键字导入时,必须在文件头部,如果希望在代码内按需导入,需要使用import()函数导入
1 | const obj = {}; |
1 | if (true) { |
1 | <script src="demo.js" type="module"></script> |
导出全部
- 导出全部时,导入时需要定义别名
1 | const obj = {}; |
1 | import * as demo from "./demo.js"; |
1 | <script src="demo.js" type="module"></script> |
导入并导出全部
1 | const obj = {}; |
1 | export * from "./demo.js"; |
1 | <script src="demo.js" type="module"></script> |
默认导出
- 一个模块只能定义一个默认导出
- 导入时可以指定任意变量名
默认导出变量
1 | const obj = {}; |
1 | import o from "./demo.js"; |
1 | <script src="demo.js" type="module"></script> |
默认导出函数
1 | const fn = function () { |
1 | import f from "./demo.js"; |
1 | <script src="demo.js" type="module"></script> |
指定别名
导出时指定别名
1 | const obj = {}; |
1 | import { o } from "./demo.js"; |
1 | <script src="demo.js" type="module"></script> |
导入时指定别名
1 | const obj = {}; |
1 | import { obj as o } from "./demo.js"; |
1 | <script src="demo.js" type="module"></script> |
导入时给整个模块起别名
1 | const obj = {}; |
1 | import * as demo from "./demo.js"; |
1 | <script src="demo.js" type="module"></script> |
定义时直接导出
定义变量时直接导出
1 | export const obj = {}; |
1 | import { obj } from "./demo.js"; |
1 | <script src="demo.js" type="module"></script> |
定义函数时直接导出
1 | export function fn() { |
1 | import { fn } from "./demo.js"; |
1 | <script src="demo.js" type="module"></script> |
定义类时直接导出
1 | export class Cls() { |
1 | import { Cls } from "./demo.js"; |
1 | <script src="demo.js" type="module"></script> |
查看导入元数据
1 | console.log(import.meta); |