Node.js v12 新增的强大功能

2025-06-08

Node.js v12 新增的强大功能

本周,我们迎来了 Node.js v12 的发布,这是下一个 Node.js 版本线,即将成为 LTS 版本。我想回顾一下之前发布的各种文章和更新日志,并将这些信息浓缩成一份易于理解的 Node.js v12.x 新功能摘要,与大家分享。💖

🔥 变化

让我们深入了解 v12.0.0 中的一些最重要和最显著的变化!

新的 ES 模块,

随着 Node.js v12.0.0 的发布,我们看到 Node.js 中引入了 ES 模块的新实现。🎉

注意: ES 模块功能仍处于实验阶段,因此在最终确定之前不应在生产代码中使用。

在发布时,此新实现已取代了标记后的先前实现--experimental-modules。此举旨在帮助新实现顺利发布并进行测试,以便项目获得反馈。如果一切顺利 (🤞),此实现将在 10 月份 Node.js v12 LTS 正式发布后以未标记的形式发布!

首先,我想说的是,这将是一个tl;dr。如果你有兴趣深入了解Node.js中ESM的新热点,请查看Modules团队在Medium上的博客文章。

先前的实现

之前实现的许多功能都被继承了下来。这包括 ES2015import语句、各种export、所有核心模块上的 Node.jsexport支持、针对 CommonJS 的 WIP 导入、非常WIP 的加载器 API,以及如果文件扩展名存在则进行显式 ESM 解析.mjs

新的实施功能

这些功能是模块团队一直致力于改进的全新功能,可--experimental-modules在 Node.js v12.0.0 标志中使用。

  • .js文件 中的导入和导出语法
    • 有很多反馈说 Node.js 需要提供一种在.js文件中使用导入/导出的方法。
    • 为此实施了两种不同的解决方案(继续阅读!)
  • 支持"type": "module"package.json
    • 如果检测到这种情况,Node.js 会将项目中的所有文件视为 ES 模块。 .js
    • 如果您仍有 CommonJS 文件,您可以使用.cjs文件扩展名重命名它们,这将告诉 Node.js 将它们明确解析为 CommonJS
    • 类似STDIN 的--input-type情况的标志--eval

当前 WIP 功能

这些功能目前正在由模块团队开发,要么已经实现但可能会发生变化,要么正在开发但尚未在 Node.js v12.0.0 中发布。

  • JSON 导入
    • 目前不起作用,但正在积极努力。
  • 导入并要求互操作
    • ️️⚠️ 模块团队已要求您在此问题解决之前不要发布可在 Node.js 中使用的 ES 模块。我认为在此问题解决之前发布的模块可能会崩溃。
  • 模块加载器
    • ⚠️ 非常 WIP
    • API的第一个实现--loader已经发布,但它将得到改进,因此会发生改变
  • requireES 模块代码 的更简单方法。
    • 目前的实现方式略显繁琐。Module 团队正在努力降低门槛。
  • 包路径图
    • 在某些情况下,这将允许更简洁的导入
  • 自动入口点模块类型检测
    • 实际上,静态分析可以让 Node.js 确定一个模块是 CommonJS 模块还是 ES 模块。

快速 ESM 示例

如果您有兴趣了解 Node.js 中的 ESM 是什么样子,您可以查看我昨天发布的两个 repos:

  • simple-esm – Node.js 中 ESM 的示例,以及当前的 ESM 实现
  • simple-esm-usage – 如果当前实现保持不变,如何在 Node.js 中使用来自 npm 的 ESM 模块的示例(它将会发生变化,因此这更多的是理论而不是实践)

我计划让这些 repos(以及发布到 npm 的 simple-esm 版本)保持最新,因为 ESM 实现会发生变化,这既是为了我自己的理解,也是为了作为社区资源,以便在 Node.js 中拥有一个 ESM 的最小可行示例。

V8 7.4

此版本包含一项重要的V8 升级,将 V8 的几个版本向前推进了一步,使其与发布时的最新版本相差无几。此次升级包含大量非常出色的增强功能。我个人最感兴趣的是零成本异步堆栈跟踪,但 V8 团队的 Mathias Bynens 还详细介绍了许多其他增强功能:

TLS 1.3

接下来,我们将正式支持 TLS 1.3。这是对之前 TLS 版本的一次重大改进,我非常高兴它现在已在即将推出 LTS 的发行版中得到支持!值得庆幸的是,由于 OpenSSL 1.1.1 中的底层实现,这是一个向后兼容的更改。此外,PR 中提到,它应该会反向移植到其他 LTS 发行版。

如果您对 TLS 1.3 的精彩部分感到好奇,我推荐您阅读IETF 的这篇博客文章。

工作线程

这是第一个包含目前处于实验阶段的 Worker Threads 功能的 LTS 版本。此版本不再需要使用标志来运行 Worker Threads,希望能够降低该工具在 Node.js 中更广泛地用于并行工作的门槛。

如果您有兴趣立即尝试 Worker Threads,可以使用以下一些资源来开始:

内置堆快照

在此版本中,我们还看到了改编自 npm 上的heapdump 模块的内置堆快照功能。它通过 暴露v8.getHeapSnapshot()并返回可读流。

其他值得注意的变化和改进

希望这篇新版本概述对您有所帮助!如果您对新发布的功能有任何疑问,例如何时可以在 Node.js 中使用 ESM,或者任何其他关于 Node.js v12 的问题,我很乐意为您提供资源,希望您能找到想要的答案!

鏂囩珷鏉ユ簮锛�https://dev.to/bnb/the-awesome-features-that-just-landed-with-node-js-v12-178d
PREV
Building a sentiment analysis app with Node.js
NEXT
使用 Node.js 和 Puppeteer 从 HTML 生成 PDF