简明 ES6 模块
1.什么是模块
模块就是一段代码,这段代码可以反复使用,经常单独写成一个文件,一旦加载会立即执行。
2.导出
导出有 2 种方式:命名导出和默认导出,分别用关键字export和export default表示
2.1 命名导出:export 关键字
- 第一种方式:在要导出的代码前加上 export 关键字就可以了!
1 | export var foo; |
- 第二种方式:将要导出的对象放在
export {}的{}中
1 | var foo1; |
2.2 默认导出:export default 关键字
- 第一种方式:在要导出的函数或者类之前加 export default 关键字,其中名称可以省略。这将会使其具有匿名函数和匿名类的功能。
1 | export default function myFunc() {} |
- 第二种方式:用
export default moduleName关键字导出
1 | ========================= |
注意:使用命名导出时,一个 js 文件可以 export 多个模块;但是使用默认导出时,一个文件只能有一个模块导出,否则将会报错。
2.3 其他
2.3.1 重命名导出
1 | export { MY_CONST as FOO, myFunc }; |
2.3.2 从其他模块导出
1 | export * from "src/other_module"; |
3.导入
| 导入方式 | 语法 | 描述 |
|---|---|---|
| 默认导入 | import localName from 'src/my_lib'; |
- |
| 命名空间导入 | import * as my_lib from 'src/my_lib'; |
- |
| 命名导入 | import { name1, name2 } from 'src/my_lib'; |
- |
| 重命名导入 | import { name1 as localName1, name2 } from 'src/my_lib'; |
- |
| 空导入 | import 'src/my_lib'; |
仅加载模块,不导入任何内容 |
| 默认导入+命名空间 | import theDefault, * as my_lib from 'src/my_lib'; |
- |
| 默认导入+命名导入 | import theDefault, { name1, name2 } from 'src/my_lib'; |
- |
4.导出与导入之家的关联
- 使用命名导出时,应用
import {ModuleName}的方式导入;使用默认导出时,使用import moduleName的方式导入,无需加花括号。 - 导入的时候,我们可以只导入我们需要的模块,如以下。
1 | ------lib.js----- |
5. 在 script 中使用模块
1 | <!--加载一个js模块文件--> |
6.注意事项
- 直接使用模块语法在浏览器中可能无效,需要 babel 等工具转为可接受的语法
- 导出的 2 种方式 export 和 export default 在一个文件中最好用一种,尽量少混用
- 在 ES6 模块中,default 是一个关键字,不要使用 default 作为 as 的重命名名称
- import 后,import 的模块将会被提升,放置于当前代码的最前端。因此,何处导入模块并不重要。
- import 应该是单独的一条语句,不能在其他语句中运行该语句。以下 example.js 中的操作将导致错误。
- 导入的只是当初模块的只读视图,这意味着操作的模块中的变量都存储在模块的内部
1 | -----example.js------ |
7.实例
【实例 1】链接信息
1 | -----api.js----- |
【实例 2】工具类
1 | // 加解密算法 |
【实例 3】接口
1 | -----api.js----- |