一、区分
1. import命令会被 JavaScript 引擎静态分析,先于模块内的其他模块执行(叫做”连接“更合适)。
2. import()函数,完成动态加载,异步加载。import()类似于 Node 的require方法,区别主要是前者是异步加载,后者是同步加载。ES6 import()返回一个 Promise 对象。
3. require是运行时加载模块,只有运行时才知道,同步加载。
二、ES6模块
1. 基本的导出
(1) 可以在变量、函数、类定义前加export
(2) 可以在代码的尾部 export { 变量/函数/类的名称 }
2. 基本的导入
(1) 在其它模块内使用import关键字来访问已被导出的功能。
(2) 导入单个绑定: import { identifier1 } from "./example.js";
(3) 导入多个绑定: import { identifier1, identifier2 } from "./example.js";
(4) 导入整个模块: import * as example from "./example.js";
导入绑定的一个怪异点:外部模块导入的 name 变量与在 example.js 模块内部的 name 变量对比, 前者是对于后者的只读引用, 会始终反映出后者的变化。
3. 重命名的导入与导出
你可能并不想使用从模块中导出的变量、函数或类的原始名称。可以在导入或导出的过程中进行修改。
(1) export { sum as add }
(2) import { sum as add } from "./example.js"
4. 导出默认值