最近,npm 官方发布了对 2023 年的总结,其中包括了很多有意思的数据。

作为前端最受欢迎也是最有争议的包管理器,我们一起来看看这份总结吧:
在十年前,我们还可以在一次会议上阅读出每个 npm 包的名称。到 2023 年底,来自将近 90 万维护者的 npm 注册表已经导入了近 400 万个包。
官方 npm 统计数据显示,到 2023 年底,活跃的包数量超过了 250 万,每月的下载量更是超过了惊人的 1840 亿次。
2.5 万与 400 万之间的差距凸显出,许多包最终被从注册表中移除。在 npm 上发布是一件非常简便的事,没有网关和发布前的审核,所以 npm 注册表相比其他语言生态系统更容易存储恶意包。然而,根据我们在 Python 生态系统中已经发现的一些恶意行为,这个观点可能并不完全是理所当然。
在 2023 年的过程中,我们发布了对 Python 和 Go 的支持,计划在 2024 年支持更多的语言生态系统,比如 Java。未来,我们将发布生态系统的对比,以对常规观点进行测试!
我们的数据显示,在 2023 年,npm注册表上发布了 10,518,566 个软件包版本。以下是按月份分解的数据,显示该注册表在三月和四月份更新的软件包最多,可能是因为在 2023 年三月和四月份,npm 注册表遭受了大规模的以约翰・威克为主题的垃圾邮件和网络钓鱼攻击。

每月发布的npm软件包版本数
同时,在 2023 有 1,241,583 个版本被撤销发布。我们统计到 2023 年新加入了 165,486 位维护者,这一增长速度估计意味着我们将在 2024 年突破 100 万个软件包维护者的纪录!
我们可以看到,npm 最常发布和使用的是哪些软件包呢?虽然 npm 最初是 Node.js 的软件包管理器,但在过去几年中,它的迅猛崛起也使其成为了 JavaScript 前端项目的事实标准软件包管理器,大部分取代了 Bower ,并在 JS 项目中实现了更统一和更流畅的开发工作流程。
下图显示了按依赖数排名前 50 的软件包:

依赖数排名前50的npm软件包
TypeScript 显得非常亮眼,TypeScript 最初发布于2011年10月,在2017-2018年左右获得了显著的流行,并逐渐成为编写大型应用程序的标准,但也越来越多地用于库代码。
在前端框架和库方面,React 位居第二并不令人意外,鉴于其庞大的组件生态系统和在该领域中的主导地位。列表中唯一的其他前端库是 Vue.js(Angular 以 @angular/core 在第62位)。
我们还可以从最受欢迎的软件包按每周下载次数的角度来观察:

这个列表由一些专注于实用性的、广泛被其他软件包间接使用的软件包主导,从而累积了大量的下载量。非常活跃的开源开发者和维护者 Sindre Sorhus 在此列表中拥有很强的存在感,他负责了列表中一半的软件包。
或者,我们可以将注意力限制在在 2023 年首次发布的软件包上。那么,该列表如下:

我们使用 Socket AI,基于人工智能的威胁检测系统,扫描了数百万个 npm 软件包中的文件。在 2023 年,我们确定了五千多个恶意软件包,并随后被 npm 注册表下架。
2023 年,在加密货币领域发生了多起备受关注的供应链攻击。例如,hardhat-gas-report 这样一个软件包在数月内都是无害的,但后来被更新为包含恶意代码以窃取以太坊私钥。而在12月14日,一名前 Ledger 员工遭受网络钓鱼攻击后,黑客获取了其 npmjs 账户的访问权限,并发布了一个恶意版本的 Ledger Connect Kit,试图将资金重定向到黑客的钱包。
除了恶意软件的增加,npm 还面临多次垃圾邮件攻击。在去年2月,攻击者在短短两天内发布了超过 15,000 个垃圾软件包到 npm 注册表中。Socket 的安全研究团队在去年稍后发现了另一次大规模的垃圾邮件攻击活动。
最后但同样重要的是,这里有一些你可能没有考虑过的问题的答案,但一旦提出来可能会引起你的好奇心:
哪个软件包的名称最长?首先,应该指出,在 npm 上,软件包名称的最大长度为 214 个字符。那么在注册表上是否有这样的软件包?是的,以下软件包都使用了所有可用的字符数:
ifyouwanttogetthesumoftwonumberswherethosetwonumbersarechosenbyfindingthelargestoftwooutofthreenumbersandsquaringthemwhichismultiplyingthembyitselfthenyoushouldinputthreenumbersintothisfunctionanditwilldothatforyoukoishi-plugin-uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuthis-package-exports-the-number-214-and-its-name-is-also-two-hundred-and-fourteen-characters-long-which-is-the-longest-name-currently-allowed-by-the-npm-registry-to-see-how-a-name-that-long-would-look-if-you-did-iithis-package-exports-the-number-214-and-its-name-is-also-two-hundred-and-fourteen-characters-long-which-is-the-longest-name-currently-allowed-by-the-npm-registry-to-see-how-a-name-that-long-would-look-if-you-did-itaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa领先者的 @chainsafe/eth2-spec-tests 容量高达 5.96 GB。紧随其后的是 1.1.0 版本的 kuzzle,紧随其后,大小约为 5.88 GB。modez 位居第三,内存为 4.39 GB。下面是排名前 10 的列表:
优胜者是 @seek/asia-translations,拥有 554 个维护者。紧随其后的是两个来自 Condé Nast 的软件包,但 BBC 在前十名中也有几个出色的软件包。以下是按维护者数量排名的前十个软件包版本的完整列表。