暖夏少年|这些 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
原文:
推荐阅读
- 游研社|虎牙斗鱼合并,游戏直播赛道还有这些低调玩家
- 公安机关|这些人,速速投案!
- 锦州|寻味辽宁醉经典|“烧鸽子”“炒河蟹”……这些锦州烧烤吃起来别有一番风味!
- 烧烤|这些垃圾食品真的不垃圾,只要你会这样吃...【食安宣传周】火锅、汉堡、烧烤
- 北京青年报|干冷秋冬季 这些“好物”提升幸福感
- 彭坦|他曾是乐队主唱颜值天花板,娶名模12年0绯闻,42岁仍是少年
- 鲜闻联播|二话不说!拔剑指向酒馆老板,笑话:少年只身来到一家酒馆
- 戏说健康|对于许多老师都头疼的公开课, 怎样预备才好? 这些细节不能忽略
- 惩戒|全面“断卡”!已有人被惩戒,这些事做不得!
- 战斗机,军事|这张迟来的“全家福”,14岁少年等了14年!
