[Node翻译]为ESM做好准备

193 阅读3分钟

原文地址:blog.sindresorhus.com/get-ready-f…

原文作者:medium.com/@sindresorh…

发布时间:2021年1月13日 - 2分钟阅读

JavaScript模块即将成为Node.js包维护者的现实。

这篇博文是针对Node.js包维护者的。

在2021年4月底,Node.js 10将寿终正寝,这意味着包维护者可以针对Node.js 12。这个Node.js版本完全支持JavaScript模块,也就是ESM。

左起: Addy Osmani, Dave Herman, and Sindre Sorhus.

背景资料

就我个人而言,我已经等待ESM的发生将近10年了。在2012年,我坐在一个会议晚宴上,与 Addy OsmaniDave Herman 正在询问关于早期ESM语法的反馈。

CommonJS已经为我们服务了很多年,但ESM有很多好处,比如语言级语法、浏览器支持、默认为严格模式、异步加载、顶层 await、改进的静态分析和树形震动等等。

如果你不熟悉ESM,可以从阅读MDN概述开始。关于ESM的Node.js文档也非常全面,IMHO是必读的。

引入一个新的模块系统不是一件简单的事情。生态系统是巨大的,要移动整个生态系统需要很多年。幸运的是,聪明的人已经花了很多精力让这些模块系统相当兼容。ESM可以导入CommonJS,CommonJS也可以导入ESM。然而,这是一个很大的howeverCommonJS只能异步导入ESM

迁移

有两种方法可以将你的软件包移动到ESM。

  1. 纯ESM

这样做的好处是更容易设置。你只需要在你的package.json中添加 "type": "模块 "到你的package.json中,需要Node.js 12,更新文档和代码范例,然后做一个主要的发布。

  1. 双重 - ESM与构建步骤,转置CommonJS的后备程序。

这需要你也设置一个构建步骤,并在你的package.json中添加一个export字段。阅读更多

我个人计划做1,因为我觉得撕掉刘海,推动生态圈的发展比较好。

计划

我打算在2021年内将我的大部分1K以上的包转移到纯ESM上。我希望其他的包维护者也能跟进。

如果你是Node.js包的维护者,请考虑在5月份留出一些时间,将你的包转移到ESM。这对整个生态系统都有好处!你可以阅读更多关于我的ESM的内容。

你可以在这里阅读更多关于我的ESM计划。

如果你有任何关于转移到ESM的问题,你可以在这里提问。

常見問題

ESM比CommonJS对服务器专用包有什么好处?

twitter.com/theshalvah/…

  • 统一的语法。有助于教学。
  • 顶层的 await。很适合CLI。
  • 在同一条语句中同时导入默认导出和命名导出。
  • 重新导出语法。
  • 潜在的更快的导入步骤。
  • 官方的加载器钩子(仍是草案)。

通过www.DeepL.com/Translator(免费版)翻译