当前位置: 首页 > article >正文

ES Module 标准规范

ES Module(ECMAScript Module)是 JavaScript 中用于处理模块的标准规范,旨在提供一种原生的、静态的模块系统,适用于浏览器和服务器端(如 Node.js)开发。

一、导入模块

1. 使用 `import` 关键字导入模块

通过 `import` 关键字,可以从其他模块中导入函数、对象、类、变量等。导入语句通常位于文件的顶部,在代码的最外层作用域。

// 从 './math.js' 导入 add 函数

import { add } from "./math.js";

console.log(add(5, 3));

2. 导入整个模块

也可以导入整个模块,将其作为一个对象使用。

// 导入整个 math 模块

import * as math from "./math.js";

console.log(math.add(5, 3));

console.log(math.subtract(5, 3));

3. 导入默认导出

如果一个模块有默认导出,可以使用 `import` 语句导入默认导出。

// 导入 math 模块的默认导出

import math from "./math.js";

console.log(math(5, 3));

二、导出模块

1. 使用 `export` 关键字导出模块内容

在模块中,可以使用 `export` 关键字导出函数、对象、类、变量等。

// math.js

export function add(a, b) {

  return a + b;

}

export function subtract(a, b) {

  return a - b;

}

2. 默认导出

一个模块可以有一个默认导出,使用 `export default` 关键字。

// math.js

function add(a, b) {

  return a + b;

}

export default add;

三、动态导入(Dynamic Import)

1. 使用 `import()` 函数进行动态导入

`import()` 函数返回一个 Promise,允许在运行时动态导入模块,适用于按需加载模块,提高性能和资源利用率。

// 动态导入 math 模块

import("./math.js")

  .then((math) => {

    console.log(math.add(5, 3));

  })

  .catch((error) => {

    console.error("Failed to import module:", error);

  });

四、浏览器支持

在 HTML 文件中,使用 `<script type="module">` 来启用 ES Module 支持。

<!DOCTYPE html>

<html lang="en">

  <head>

    <meta charset="UTF-8" />

    <title>ES Modules Example</title>

  </head>

  <body>

    <script type="module">

      import { add } from "./math.js";

      console.log(add(5, 3));

    </script>

  </body>

</html>

五、Node.js 支持

在 Node.js 中,从版本 13.2.0 开始,支持 ES Module,但需要使用 `.mjs` 文件扩展名或在 `package.json` 中设置 `"type": "module"` 来启用 ES Module 模式。

// package.json

{

    "type": "module"

}
// math.mjs

export function add(a, b) {

  return a + b;

}

六、代码解释

1. 在导入模块时,`import` 关键字会告诉 JavaScript 引擎从指定的文件或模块中获取所需的资源。通过花括号 `{}` 可以精确导入所需的部分,如 `{ add }` 仅导入 `add` 函数;使用 `* as math` 会将整个模块作为 `math` 对象导入;`import math from './math.js'` 则导入默认导出。

2. 在导出模块时,`export` 关键字将模块内的函数、对象等暴露给其他模块,而 `export default` 用于导出一个默认值。

3. `import()` 函数允许在运行时根据条件或需要动态加载模块,提高了性能和灵活性。


http://www.kler.cn/a/516870.html

相关文章:

  • 20250122-正则表达式
  • 从理论到实践:Django 业务日志配置与优化指南
  • Redis使用基础
  • OSCP - Proving Grounds - Quackerjack
  • 电子应用设计方案102:智能家庭AI鱼缸系统设计
  • Next.js:构建大模型智能体GPT研究者应用的 Web开发框架
  • C++|开源日志库log4cpp和glog
  • 【云南省乡镇界】面图层shp格式arcgis数据乡镇名称和编码+wgs84坐标无偏移内容测评
  • 【javaSE】内部类(来自类和对象的补充)
  • vue(33) : 安装组件出错解决
  • 在 Ubuntu 上的 Docker 容器中安装 MySQL
  • 订单状态定时处理、来单提醒和客户催单(day10)
  • k8s优雅重启
  • 【GORM】事务,嵌套事务,保存点事务的使用,简单电商平台go案例
  • 力扣动态规划-5【算法学习day.99】
  • 快速排序:一种高效的排序算法
  • Python 预训练:打通视觉与大语言模型应用壁垒——Python预训练视觉和大语言模型
  • WPS计算机二级•表格保护与打印
  • 深入解析:使用 Python 爬虫获取苏宁商品详情
  • 总结 uniapp 上不适配iphone的:new Date 时间、border线条、渐变
  • 深入探索 Nginx 的高级用法:解锁 Web 服务器的强大潜能
  • 2. Flink分区策略
  • vue3的组件v-model(defineModel()宏)
  • 第十五届蓝桥杯大赛软件赛省赛C/C++ 大学 B 组
  • 深度学习|表示学习|卷积神经网络|通道 channel 是什么?|05
  • 怎样使用树莓派自己搭建一套ADS-B信号接收系统