原文地址:blog.sindresorhus.com/get-ready-f…
发布时间: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 Osmani 和 Dave Herman 正在询问关于早期ESM语法的反馈。
CommonJS已经为我们服务了很多年,但ESM有很多好处,比如语言级语法、浏览器支持、默认为严格模式、异步加载、顶层 await、改进的静态分析和树形震动等等。
如果你不熟悉ESM,可以从阅读MDN概述开始。关于ESM的Node.js文档也非常全面,IMHO是必读的。
引入一个新的模块系统不是一件简单的事情。生态系统是巨大的,要移动整个生态系统需要很多年。幸运的是,聪明的人已经花了很多精力让这些模块系统相当兼容。ESM可以导入CommonJS,CommonJS也可以导入ESM。然而,这是一个很大的however,CommonJS只能异步导入ESM。
迁移
有两种方法可以将你的软件包移动到ESM。
- 纯ESM
这样做的好处是更容易设置。你只需要在你的package.json中添加 "type": "模块 "到你的package.json中,需要Node.js 12,更新文档和代码范例,然后做一个主要的发布。
- 双重 - ESM与构建步骤,转置CommonJS的后备程序。
这需要你也设置一个构建步骤,并在你的package.json中添加一个export字段。阅读更多
我个人计划做1,因为我觉得撕掉刘海,推动生态圈的发展比较好。
计划
我打算在2021年内将我的大部分1K以上的包转移到纯ESM上。我希望其他的包维护者也能跟进。
如果你是Node.js包的维护者,请考虑在5月份留出一些时间,将你的包转移到ESM。这对整个生态系统都有好处!你可以阅读更多关于我的ESM的内容。
你可以在这里阅读更多关于我的ESM计划。
如果你有任何关于转移到ESM的问题,你可以在这里提问。
常見問題
ESM比CommonJS对服务器专用包有什么好处?
- 统一的语法。有助于教学。
- 顶层的 await。很适合CLI。
- 在同一条语句中同时导入默认导出和命名导出。
- 重新导出语法。
- 潜在的更快的导入步骤。
- 官方的加载器钩子(仍是草案)。
通过www.DeepL.com/Translator(免费版)翻译