8 模块系统之 ES 模块

在上一篇文章中,我们讨论了 Node.js 的模块系统之 CommonJS 模块,了解到了如何使用 requiremodule.exports 来组织我们代码中的模块。在这一篇中,我们将探讨另一种模块系统——ES 模块(ECMAScript Modules),这也是现代 JavaScript 推荐的模块组织方式。ES 模块在浏览器中得到广泛应用,并且 Node.js 也逐步开始支持这一标准。

什么是 ES 模块?

ES 模块是 ECMAScript 2015(ES6)引入的一种标准化的模块系统。这种模块系统允许开发者使用 importexport 关键字来引入和导出模块,使得代码更加清晰和可维护。

ES 模块的基本语法

  • 导出模块

要导出一个变量、函数或类,可以使用 export 关键字。例子如下:

1
2
3
4
5
// myModule.js
export const name = 'Node.js';
export function greet() {
console.log(`Hello, ${name}!`);
}
  • 导入模块

要导入一个模块,可以使用 import 关键字。可以使用默认导入和命名导入,具体如下:

1
2
3
4
5
// main.js
import { name, greet } from './myModule.js';

console.log(name); // 输出: Node.js
greet(); // 输出: Hello, Node.js!

在上面的示例中,我们从 myModule.js 文件中导入了 name 变量和 greet 函数,并使用它们。

Node.js 中使用 ES 模块

启用 ES 模块支持

在 Node.js 中,可以通过以下两种方法启用 ES 模块支持:

  1. 使用 .mjs 扩展名。
  2. package.json 文件中添加 "type": "module"

例如,假设我们选择第二种方法,可以创建一个 package.json 文件如下:

1
2
3
{
"type": "module"
}

案例:创建一个简单的模块

让我们创建一个简单的 Node.js 应用,使用 ES 模块组织代码。

1. 创建项目结构

1
2
3
4
5
my-node-app/

├── package.json
├── index.js
└── utils.js

2. 编辑 utils.js 文件

utils.js 中,我们将导出一个简单的加法函数:

1
2
3
4
5
6
7
8
// utils.js
export function add(x, y) {
return x + y;
}

export function subtract(x, y) {
return x - y;
}

3. 编辑 index.js 文件

index.js 中,我们将导入上面的函数并使用它们:

1
2
3
4
5
6
7
8
// index.js
import { add, subtract } from './utils.js';

const sum = add(5, 3);
const difference = subtract(5, 3);

console.log(`Sum: ${sum}`); // 输出: Sum: 8
console.log(`Difference: ${difference}`); // 输出: Difference: 2

在 Node.js 中运行

确保你的 package.json 文件中含有 "type": "module",然后在终端中使用命令:

1
node index.js

你应该会看到如下输出:

1
2
Sum: 8
Difference: 2

ES 模块的特性

1. 静态分析

ES 模块的一个好处是支持静态分析,导入和导出的路径在编译时就能够确定。这使得工具(例如 IDE 和构建工具)可以更容易地分析依赖关系。

2. 使用 default 导出

一个模块可以有一个默认导出,使用 export default 语法:

1
2
3
4
5
6
// myDefaultModule.js
const myFunction = () => {
console.log('This is my default function');
};

export default myFunction;

导入方式如下:

1
2
3
4
// main.js
import myFunction from './myDefaultModule.js';

myFunction(); // 输出: This is my default function

小结

在这一篇文章中,我们深入探讨了 Node.js 中的 ES 模块,包括其语法和用法。我们创建了一个简单的应用,演示了如何导入和导出模块,以及如何在 Node.js 环境中运行它们。相较于 CommonJS,ES 模块提供了更清晰的语法和更好的静态分析功能。

下一篇文章,我们将讨论 Node.js 中的异步编程之回调函数,进一步探索 JavaScript 的异步特性及其在 Node.js 中的应用。请保持关注!

8 模块系统之 ES 模块

https://zglg.work/node-js-you-need/8/

作者

IT教程网(郭震)

发布于

2024-08-10

更新于

2024-08-10

许可协议

分享转发

交流

更多教程加公众号

更多教程加公众号

加入星球获取PDF

加入星球获取PDF

打卡评论