8 模块系统之 ES 模块
在上一篇文章中,我们讨论了 Node.js 的模块系统之 CommonJS 模块,了解到了如何使用 require
和 module.exports
来组织我们代码中的模块。在这一篇中,我们将探讨另一种模块系统——ES 模块(ECMAScript Modules),这也是现代 JavaScript 推荐的模块组织方式。ES 模块在浏览器中得到广泛应用,并且 Node.js 也逐步开始支持这一标准。
什么是 ES 模块?
ES 模块是 ECMAScript 2015(ES6)引入的一种标准化的模块系统。这种模块系统允许开发者使用 import
和 export
关键字来引入和导出模块,使得代码更加清晰和可维护。
ES 模块的基本语法
- 导出模块
要导出一个变量、函数或类,可以使用 export
关键字。例子如下:
1 | // myModule.js |
- 导入模块
要导入一个模块,可以使用 import
关键字。可以使用默认导入和命名导入,具体如下:
1 | // main.js |
在上面的示例中,我们从 myModule.js
文件中导入了 name
变量和 greet
函数,并使用它们。
Node.js 中使用 ES 模块
启用 ES 模块支持
在 Node.js 中,可以通过以下两种方法启用 ES 模块支持:
- 使用
.mjs
扩展名。 - 在
package.json
文件中添加"type": "module"
。
例如,假设我们选择第二种方法,可以创建一个 package.json
文件如下:
1 | { |
案例:创建一个简单的模块
让我们创建一个简单的 Node.js 应用,使用 ES 模块组织代码。
1. 创建项目结构
1 | my-node-app/ |
2. 编辑 utils.js
文件
在 utils.js
中,我们将导出一个简单的加法函数:
1 | // utils.js |
3. 编辑 index.js
文件
在 index.js
中,我们将导入上面的函数并使用它们:
1 | // index.js |
在 Node.js 中运行
确保你的 package.json
文件中含有 "type": "module"
,然后在终端中使用命令:
1 | node index.js |
你应该会看到如下输出:
1 | Sum: 8 |
ES 模块的特性
1. 静态分析
ES 模块的一个好处是支持静态分析,导入和导出的路径在编译时就能够确定。这使得工具(例如 IDE 和构建工具)可以更容易地分析依赖关系。
2. 使用 default
导出
一个模块可以有一个默认导出,使用 export default
语法:
1 | // myDefaultModule.js |
导入方式如下:
1 | // main.js |
小结
在这一篇文章中,我们深入探讨了 Node.js 中的 ES 模块,包括其语法和用法。我们创建了一个简单的应用,演示了如何导入和导出模块,以及如何在 Node.js 环境中运行它们。相较于 CommonJS,ES 模块提供了更清晰的语法和更好的静态分析功能。
下一篇文章,我们将讨论 Node.js 中的异步编程之回调函数,进一步探索 JavaScript 的异步特性及其在 Node.js 中的应用。请保持关注!
8 模块系统之 ES 模块