我的编程空间,编程开发者的网络收藏夹
学习永远不晚

javascript如何动态导入ECMAScript模块

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

javascript如何动态导入ECMAScript模块

小编给大家分享一下javascript如何动态导入ECMAScript模块,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!

ECMAScript(又名ES2015或ES)模块是在JavaScript中组织内聚代码块的一种方法。

ES模块系统有2个部分:

  • import模块 - 使用 import { func } from './myModule'

  • export模块-  使用 export const func = () => {}

import 模块是使用 import 语法导入依赖项的模块:

import { concat } from './concatModule';

concat('a', 'b'); // => 'ab'

而被导入的模块使用export语法从自身导出组件:

export const concat = (paramA, paramB) => paramA + paramB;

import { concat } from './concatModule'使用ES模块的方式是静态的:意味着模块之间的依赖关系在编译时就已经知道了。

虽然静态导入在大多数情况下是有效的,但有时我们想节省客户的带宽并有条件地加载模块。

为了实现这一点,我们可以用不同的方式使用 import(pathToModule) 语法对模块进行新的动态导入:作为一个函数。动态导入是ES2020开始的一个JavaScript语言特性。

1. 动态模块的导入

import关键字用作函数而不是静态导入语法时:

const module = await import(pathToModule);

它返回一个promise ,并开始一个加载模块的异步任务。如果模块被成功加载,那么promise就会解析到模块的内容,否则,promise 就会被拒绝。

请注意,pathToModule可以是任何表达式,其值为表示导入模块路径的字符串。有效的值是普通的字符串字面意义(如./myModule)或有字符串的变量。

例如,我们在一个异步函数中加载一个模块。

async function loadMyModule() {
  const myModule = await import('./myModule');
  // ... use myModule
}

loadMyModule();

有趣的是,与静态导入相反,动态导入接受以模块路径求值的表达式

async function loadMyModule(pathToModule) {
  const myModule = await import(pathToModule);
  // ... use myModule
}

loadMyModule('./myModule');

现在,了解了如何加载模块后,我们来看看如何从导入的模块中提取组件。

2.导入组件

2.1 导入命名组件

考虑下面的模块:

// namedConcat.js
export const concat = (paramA, paramB) => paramA + paramB;

这里导出了一个 concat 函数。

如果想动态导入namedConcat.js,并访问命名的导出concat,那么只需通解构的方式就行了:

async function loadMyModule() {
  const { concat } = await import('./namedConcat');
  concat('b', 'c'); // => 'bc'
}

loadMyModule();

2.2 默认导出

如果模块是默认导出的,我们可以使用default属性来访问。

还是上面的例子,我们将defaultConcat.js里面的concat函数默认导出:

// defaultConcat.js
export default (paramA, paramB) => paramA + paramB;

在动态导入模块中,可以使用default属性来访问:

async function loadMyModule() {
  const { default: defaultImport } = await import('./defaultConcat');
  defaultImport('b', 'c'); // => 'bc'
}

loadMyModule();

注意,default在JavaScript中是一个关键字,所以它不能用作变量名。

2.3导入混合形式

如果模块里面既有默认导出也有命名导出,同样也是使用解构的方式来访问:

async function loadMyModule() {
  const { 
    default: defaultImport,
    namedExport1,
    namedExport2
  } = await import('./mixedExportModule');
  // ...
}

loadMyModule();

3.何时使用动态导入

建议在模块比较大的,或者要根据条件才导入的模块可以使用动态导入

async function execBigModule(condition) {
  if (condition) {
    const { funcA } = await import('./bigModuleA');
    funcA();
  } else {
    const { funcB } = await import('./bigModuleB');
    funcB();
  }
}

execBigModule(true);

对于小模块(如前面例子中的namedConcat.jsdefaultConcat.js),只有几十行代码,使用动态导入在点杀鸡用牛刀感觉。

看完了这篇文章,相信你对“javascript如何动态导入ECMAScript模块”有了一定的了解,如果想了解更多相关知识,欢迎关注编程网行业资讯频道,感谢各位的阅读!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

javascript如何动态导入ECMAScript模块

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

如何动态导入ECMAScript模块?

import { concat } from \'./concatModule\'使用ES模块的方式是静态的:意味着模块之间的依赖关系在编译时就已经知道了。

Python30 动态导入模块/断言

动态导入模块方式1(解释器调用)根据当前目录结构进行动态导入模块设置#在A1.py中from code1 import aa #使用该方式就可以导入aa这个模块#在A1.py中modname = 'aa'from code1 import
2023-01-31

python如何导入sklearn模块

要导入sklearn模块,可以使用以下代码:from sklearn import 模块名或者可以导入具体的子模块或函数:from sklearn.模块名 import 子模块名或函数名例如,要导入sklearn的线性回归模型,可以使用
python如何导入sklearn模块
2024-02-29

python如何导入pygame模块

这篇文章将为大家详细讲解有关python如何导入pygame模块,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Python的优点有哪些1、简单易用,与C/C++、Java、C# 等传统语言相比,Pytho
2023-06-14

python如何导入numpy模块

要导入numpy模块,可以使用以下语句:```pythonimport numpy```或者使用以下语句并为模块指定一个别名:```pythonimport numpy as np```然后就可以使用numpy中的函数和类了。例如:```p
2023-09-08

如何像导入 JS 模块一样导入 CSS?

刚刚发布的 Chrome 93 版本中更新了一项令人兴奋的新特性:CSS Module Script,使用它你可以像导入一个 JavaScript 模块一样加载 CSS 样式。

python中的模块如何导入

在Python中,可以使用`import`关键字来导入一个模块。有几种导入模块的方式:1. 导入整个模块:`import module_name`这种方式导入整个模块后,可以通过`module_name`来访问模块中的属性和方法。例如:``
2023-09-08

python如何重新导入模块

在Python中重新导入模块可以使用importlib模块的reload函数。例如:import importlibimport example_module# 重新导入example_moduleimportlib.reload(e
python如何重新导入模块
2024-04-03

OrchardCore 如何动态加载模块?

若对OrchardCore有所了解的童鞋应该知道,OrchardCore本身定位于CMS系统,同时整个架构并非前后分离,采用MVC模式开发,基于此,由于内置需要预编译视图以及考虑其他等等原因,不支持动态加载模块,本文给出我所想到的动态加载模
CMS系统模块2024-12-03

python非内置模块如何导入

要导入非内置模块,可以使用`import`语句。例如,如果要导入名为`mymodule`的模块,可以使用以下代码:```pythonimport mymodule```然后,可以使用`mymodule`中的函数、变量或类。例如,如果`mym
2023-08-29

导入pygame模块报错如何解决

首先,需要检查是否已经安装了pygame模块。可以在命令行中输入`pip show pygame`来检查是否已经安装了。如果没有安装,可以使用`pip install pygame`命令来安装。如果已经安装了pygame模块,但是导入时仍然
2023-09-08

python如何导入自己写的模块

在Python中,要导入自己写的模块,可以按照以下步骤进行操作:1. 创建一个新的Python文件,例如`my_module.py`,并在该文件中编写你自己的模块代码。2. 在另一个Python文件中,使用`import`关键字导入你的模块
2023-08-15

编程热搜

目录