{// loads named exportimport("./util.js").then(({ funcA }) => {funcA();});}); 这里使用解构的方式 , 取。暖夏少年|这些 ECMAScript 模块知识,都是我需要知道的( 二 )。" />

暖夏少年|这些 ECMAScript 模块知识,都是我需要知道的( 二 )


/ loader.jsconst btn = document.getElementById("btn");btn.addEventListener("click", () => {// loads named exportimport("./util.js").then(({ funcA }) => {funcA();});});这里使用解构的方式 , 取出**命名导出 ** funcA 方法:
({ funcA }) => {}ES模块实际上是JavaScript对象:我们可以解构它们的属性以及调用它们的任何公开方法 。
要使用动态导入的默认方法 , 可以这样做
// loader.jsconst btn = document.getElementById("btn");btn.addEventListener("click", () => {import("./util.js").then((module) => {module.default();});});当作为一个整体导入一个模块时 , 我们可以使用它的所有导出
// loader.jsconst btn = document.getElementById("btn");btn.addEventListener("click", () => {// loads entire module// uses everythingimport("./util.js").then((module) => {module.funcA();module.default();});});还有另一种用于动态导入的常见样式 , 如下所示:
const loadUtil = () => import("./util.js");const btn = document.getElementById("btn");btn.addEventListener("click", () => {//});loadUtil返回的是一个 promise , 所以我们可以这样操作
const loadUtil = () => import("./util.js");const btn = document.getElementById("btn");btn.addEventListener("click", () => {loadUtil().then(module => {module.funcA();module.default();})})动态导入看起来不错 , 但是它们有什么用呢?
使用动态导入 , 我们可以拆分代码 , 并只在适当的时候加载重要的代码 。 在 JavaScript 引入动态导入之前 , 这种模式是webpack(模块绑定器)独有的 。
像React和Vue通过动态导入代码拆分来加载响应事件的代码块 , 比如用户交互或路由更改 。
动态导入JSON文件假设我们项目有一个 person.json 文件 , 内容如下:
{"name": "Jules","age": 43}现在 , 我们需要动态导入该文件以响应某些用户交互 。
因为 JSON 文件不是一个方法 , 所以我们可以使用默认导出方式:
const loadPerson = () => import('./person.json');const btn = document.getElementById("btn");btn.addEventListener("click", () => {loadPerson().then(module => {const { name, age } = module.default;console.log(name, age);});});这里我们使用解构的方式取出 name 和 age :
const { name, age } = module.default;动态导入与 async/await因为 import() 语句返回是一个 Promise , 所以我们可以使用 async/await:
const loadUtil = () => import("./util.js");const btn = document.getElementById("btn");btn.addEventListener("click", async () => {const utilsModule = await loadUtil();utilsModule.funcA();utilsModule.default();})动态导入的名字使用import()导入模块时 , 可以按照自己的意愿命名它 , 但要调用的方法名保持一致:
import("./util.js").then((module) => {module.funcA();module.default();});或者:
import("./util.js").then((utilModule) => {utilModule.funcA();utilModule.default();});作者:Valentino Gagliardib 译者:前端小智 来源:valentinog
原文:


推荐阅读