[email protected]:现已成为 npm 默认版本,并提供 LTS 时间表

2025 年 3 月 31 日

Express v5.0.0 于去年 9 月 9 日发布,但我们并未将其设为 npm 上的 latest 版本。许多人问我们为什么以及何时会这样做,坦率地说,我们当时还没有准备好进行这一跃进。如果您在过去一年没有关注该项目的动态,我们一直在努力复兴该项目,当我们推出初始的 v5 版本时,仍有许多悬而未决的问题。所以,首先让我们快速回顾一下这些悬而未决的问题。

文档更新

我们很久没有更新文档、提供迁移指南,甚至没有完全审查一些停滞不前的 v4/5 文档。从那时起,我们得到了大量优秀贡献者的帮助,使情况大为改善。与任何基于志愿者的开源项目一样,我们喜欢有助于我们改进的贡献,因此在您升级时,请继续打开 PR 以修复我们遗漏的任何问题。

您可以在网站上找到我们的v5 文档迁移指南

迁移支持

我们知道版本之间的迁移可能具有挑战性,尤其是在涉及 Express 这样广泛使用的框架发生重大变化时。这就是为什么我们致力于提供一个解决方案,以简化部分过程并减少对开发人员的影响。

感谢 SebastianFilip 的巨大努力,我们开发了一个新的 codemod 包,专门用于方便从 Express v4 迁移到 v5,以及未来的主要版本。这个包自动化了许多必要的代码更改,最大限度地减少了手动工作,使升级尽可能顺畅和高效。

但是,我们知道并非所有更改都可以自动化。一些重大更改,例如新的路径路由匹配语法,需要开发人员手动修改。您可以在我们的原始发布公告中阅读有关 v5 带来的所有重大更改的更多信息。

有关迁移过程以及如何使用 codemod 包的更多详细信息,请查看仓库的 README迁移指南

生态系统兼容性

Express 生态系统是其最强大的资产之一。它可追溯到 Node.js 的早期,是保持 Express 流行的支柱。当它十年没有主要版本发布时,从中间件到文档的一切都需要更新。我们希望确保人们有时间更新所有这些内容,然后我们才让所有人迁移。我们特别关心我们庞大的初学者用户群,他们可能不知道他们正在阅读的博客文章与他们从 npm i express 获得的不兼容。

我们认识到在重大升级过程中一些摩擦是不可避免的,但由于 NestJS 的 Kamil 等生态系统合作伙伴在我们将 express 设置为 latest 之前努力更新,我们希望能走在前沿。正如我上面所说,我们始终欢迎帮助,以便为那些跟随您之后的人提供更轻松的过渡,PR 是您能给予的最好支持。

长期支持

我们一直在讨论 v5 发布后如何支持 v4,但我们没有定义明确的指导方针或预期,而且我们(仍然没有)关于我们计划的最终用户文档。虽然我们在这里仍有进展要做,但我们有一个拟议的 LTS 策略,这将成为我们即将发布的文档的基础。我们非常欢迎对此提出意见,以便我们能够确保其清晰传达并被社区接受。

此外,此后我们宣布与 HeroDevs 建立合作关系,以帮助那些不太能够更新的公司。当 v4 EOL 临近时,我们将提供有关其如何运作的更多信息。


支持阶段和成为最新版本

“成为最新版本”意味着什么?如果您不熟悉 npm dist-tags 的工作原理,latest 标签是用户运行 npm install express 时将获得的版本。这很重要,因为它意味着它是“默认安装版本”,并将触发近 1700 万周下载量从我们当前的最新 v4.21.2 迁移到 v5。当我们开始这一过渡时,我们希望用户、公司和其他组织清楚地了解这对支持意味着什么。为了帮助实现这一点,我们制定了 LTS 策略,该策略定义了我们的 3 个支持阶段,并为 v4 何时进入 EOL 设定了目标日期。

Express 主要版本将经历三个支持阶段

当前 (CURRENT)

活跃 (ACTIVE)

维护 (MAINTENANCE)

拟定时间表

对于现有版本线,我们将设定以下阶段日期:

主要版本 当前 (CURRENT) 活跃 (ACTIVE) 维护 (MAINTENANCE) EOL (生命周期结束)
4.x     2025-04-01 *不早于 2026-10-01
5.x 2024-09-11 2025-03-31 **不早于 2026-04-01 **不早于 2027-04-01
6.x ***不早于 2026-01-01      

如您所见,这意味着 v5.1.0 被标记为 latest 表明我们已从 CURRENT 阶段进入 ACTIVE 阶段,这通过将 v4 移至 MAINTENANCE 阶段而启动了 v4 的 EOL 倒计时。我们认识到 v4 是一个特殊情况,它在 Node.js 本身的大部分历史中都是唯一的 主要版本。正因为如此,我们希望保持灵活性并提供更长时间的支持。我们希望为生态系统做最好的事情,因此请将这些视为目标而非承诺。

*: v4 是一个特殊情况,我们可能会延长 MAINTENENCE 支持
**: v5 MAINTENENCE 和 EOL 日期由 v6 发布时间决定,这些日期反映了如果我们在 2025-10-01 发布 v6 的最早日期
***:v6 的工作尚未正式开始,这只是根据我们提出的政策可以发布的最早日期。


最后,v5.1.0 中有何变化

此次发布主要侧重于支持众多旧版 Node.js 版本所带来的技术债务,以及其他停滞但未在 v5.0.0 发布前完成的工作。

Express 5.1.0 主要变更

依赖项已更新

我们还投入时间准备了 Express 所依赖的几个包的发布。这些包中的大多数都被其他库和框架作为独立库使用。


感谢与展望

非常感谢过去一年所有参与 Express 的人,所有贡献者的工作都令人难以置信,没有他们我们无法做到。如果您无法亲自成为贡献者,请考虑要求您的公司在 OpenCollective 上为项目提供资金支持。

展望未来,我们很高兴能保持发展势头。如果您尚未阅读,我们的2024 回顾 + 2025 愿景博客文章阐述了我们过去的成就和未来的方向。这包括性能优化范围包、更好的自动化、安全强化等等。

一项重要举措是我们的新性能工作组,专注于识别和修复 Express 中长期存在的瓶颈。我们很感激能得到主权技术基金 (STF) 的支持,他们正在帮助我们投资于核心基础设施的长期可持续性和性能。此外,我们将努力改进我们的 Typescript DX,并采取下一步措施改进网站

是的,v6 的讨论已经开始升温。请密切关注更新,一如既往,我们将在 issues 中见!

非常感谢 @wesleytodd@blakeembrey@bjohansebas@UlisesGascon@Phillip9587@carpasse@jonchurch@ctcpip@inigomarquinez@carlosstenzel@crandmck@chrisdel101@dpopp07@Ayoub-Mabrouk@jonkoops@IamLizu@marco-ippolito@ipreencekmr@ShubhamOulkar@raksbisht@jeffreybaird@dougwilson@mertcanaltin@GeorgeShvab@RobinTail@EvanHahn@rhodgkins@cengizcmataraci@Shantanugupta43@italojs@ljharb@MaoShizhong@aroyan@Binilkks@danielgindi@papandreou@jsoref@bigbigDreamer@broofa@CommanderRoot@andvea@juanarbol@agungjati@alexandercerutti@pr4j3sh@hamirmahal@slagiewka@Abdel-Monaam-Aouini@sazk07@bhavya3024@joshbuker@almic@FDrag0n@Dmitry-Kondar@attrid@kristof-low@gireeshpunathil@UzairJ99@choi2021@hayden36@joharkhan99@peterh-capella@johnburnett@nicolasgandrade@axhuwastaken@abhijeetpandit7@peterdanwan@rehmansheikh222@corydalis10@mgsantos177@wilyJ80@LuiGeeDev@juliogarciape@aelmardhi@Ahmed1monm@erensarac@tomasz13nocon@tianbuyung@GreyTearsDev@aastha-cse@krzysdz@Miguelrom@bnoordhuis@MehfoozurRehman@EasonLin0716@grjan7@mishrasur7@gregfenton@zareefhasan@Tejas150@jpricardo@nikeee@dotnetCarpenter@engpetermwangi@msimerson@fetsorn@manoharreddyporeddy@lancatlin@mifi@meowingwhitey@sheplu@krsriq@ravibisht@wojtekmaj@aqeelat@melikhov-dev@alexstrat@isnifer@TorstenDittmann@Uzlopak@gurgunday@kurtextrem@hdtmccallie@proudparrot2@bewinsnw@jonboulle@alexander-akait@alxndrsn@DimitriPapadopoulos@greggman@jkbach@julien-c@risu729@JohnSimumatik@dhouck@pedro-php@aminerol@robertsky@ipetrouchtchak-fi@tinhochu@Lord-Kamina@joshkel@raiandexter0607@NateEag@rmhaiderali@ljeda

编辑此页面