GitHub喜提npm:最大的包管理工具,JS版的「pip」

1,614 阅读6分钟
刚刚,全球最大的代(tong)码(xing)托(jiao)管(you)平台 GitHub 发布公告称,该公司已经签署了一份收购 npm 的协议,后者是深受开发者欢迎的 JavaScript 包管理服务平台。收购完成后,npm 公共注册表用户可以继续免费使用,付费用户可以在不久之后将私有 npm 包迁移到 GitHub Package。
机器之心报道,参与:思、张倩、Jamin。

npm 的全称是 Node Package Manager,是一个基于 Node.js 的包管理器,创建初衷是让 JavaScript 开发人员能够更容易地分享和重用代码。

凭着 npm 团队在过去 10 年的工作,以及成千上万的开源开发人员和维护人员的贡献,该平台现在拥有 130 万个软件包,每月下载量达 750 亿次。他们的努力使得 JavaScript 成为世界上最大的开发者生态系统。

GitHub 在博文中表示,「GitHub 很荣幸参与书写 npm 故事的下一篇章。我们将帮助 npm 继续扩展以满足快速增长的 JavaScript 社区的需求。」对于每天使用 npm 公共包管理器的数百万开发人员而言,开源包将一直可用且始终免费。

为什么 npm 如此重要?

对于众多开发者而言,npm 并不陌生。即使我们常用 Python 或 C++等其它语言,但在执行某些 JS 开源项目时,也会遇到 npm。如果我们熟悉 JavaScript,那么 npm 几乎是不可或缺的软件包管理工具。可以说,npm 就类似于 Python 中的 pip。

维护与创建这一包管理器的公司,就是 npm 了。因为 npm 托管的超大代码库与软件注册表,JS 开发者可以借鉴开源软件包,而不需要从头构建应用程序。

如果我们想创建一个开源软件包,那么通常的做法是:将代码上传到 GitHub,并实时维护它。同时,将稳定版的代码也上传到 npm 上,从而方便开发者安装与管理。两者实现了不同的功能,GitHub 负责追踪代码修正与版本的迭代,而 NPM 负责管理整个安装包。

JS 是最大的开发者社区之一,而 npm 是世界上最大的软件注册表,在「下载包、安装包、上传包」这一流程中,npm 是开发生态不可或缺的一环。开发者不需要头疼软件包的各种依赖项与版本信息,都交给它就行了。

一般来说,npm 由注册表、命令行工具等几个独立的模块组成。注册表是一个巨大的数据库,保存了每个软件包的信息;命令行工具则允许开发者通过终端与 npm 进行交互。有了这几个模块,管理开源包、分享代码、管理私有软件包、管理依赖信息等等都不成问题。

npm 与 pip 其实非常像,只不过一个用于 JS,一个用于 Python。两者安装方式稍微有一点不同,npm 会把软件包安装在当前目录的 node_modules 下,pip 会把软件包安装在当前 Python 开发环境的 site-packages 中。换而言之,npm 不会对环境进行修改,似乎它更加「无污染」?

npm 这个工具确实非常好用,NPM 公司在 2015 年也获得 800 万风投资金,它与 GitHub 一样对开源包免费,而对托管的私有代码包收费。其优势在于,企业用户可以通过相同的工具管理开源包与私有包。

现在,GitHub 收购了 npm,那么它们之间会不会有一定的整合呢?毕竟去年 GitHub 还特意推出了免费软件包管理服务 GitHub Package Registry

收购之后走向何方?

对于用户来说,大家最关心的当然是收购对自己的影响。对此,GitHub CEO Nat Friedman 在官方博客中表示,对于每天使用公共 npm 注册表(registry)的数百万开发者,npm 将一直可用,而且始终免费。收购完成之后的工作重点将放在以下几个方面:

  • 投资托管服务器基础设置和平台。JavaScript 生态非常庞大,而且还在迅速扩张,因此需要一个坚实的注册系统。GitHub 将进行必要的投资,确保 npm 快速、可靠、可扩展。

  • 提升核心体验。GitHub 将致力于提升开发者和维护者的日常体验,同时继续支持 npm v7 CLI 上已经开展的重要项目,而且这些仍将是免费、开源的。激动人心的新特性包括 Workspaces 以及在包发布流程、多因素身份验证体验上的进一步改进。

  • 参与社区活动。他们将积极地与 JavaScript 社区合作,从中获得优秀的改进方案,以此来打造更好的 npm。


GitHub 表示,他们将和 npm 一起努力,提升开源软件供应链的安全性。此外,GitHub 还打算将其打赏功能(GitHub Sponsors)扩展到 npm 的生态中。

对于付费使用 npm Pro、Teams、Enterprise 的私人注册表用户,GitHub 和 npm 也将继续支持。此外,GitHub 正大力投资 GitHub Package,这是一个完全集成了 GitHub 的多语言包管理器。今年晚些时候,GitHub 将允许 npm 的付费用户将他们的私有 npm 包迁移到 GitHub Package,使得 npm 专注成为一个开放、免费的 JavaScript 软件包管理工具。

为了听取大家的意见,GitHub 还表示将于近几日在 reddit 上举办一场 AMA(Ask Me Anything)。

网友评论

针对此次收购,网友们的看法褒贬不一,但单从评论来看,支持此次收购的还是占大多数。

有网友表示,现阶段的 npm 处在较为尴尬的阶段。从公司经营的角度来说,npm 的表现并不是特别值得称赞。但相比于被 Amazon、Google 或是 Facebook 收购,被 Github 收购还算上策,至少可以保留些独立性。


而 npm 作为软件供应链中的重要支柱环节,其核心作用无须赘述,但背后公司的经营状况值得深究。有网友表示,该公司的大部分资金来源于风投,其商业模式的壁垒远没想象的那么高。


有人甚至针对 NPM 的经营状况进行了简单的思想模拟,以表明为何看好此次收购。公司运营需要资金,以现在 npm 公司的模式,想要维持运营只能吸纳越来越多的投资者,而投资者的逐利性会反向影响公司之后的发展路线,资金的不确定性会导致各个利益相关方之间的冲突。如此看来,这样的发展进程可能对整个社区都不是好事,更别说保有独立性。


不看好的也有,比如单纯的认为 Github 的东家微软是一家具有较强封闭性的公司,收购之后难以保持原有中立且高效的发展速度。

当然,对于此次收购褒贬不一,是好是坏势必要交给时间去验证。

参考链接:

https://github.blog/2020-03-16-npm-is-joining-github/
https://news.ycombinator.com/item?id=22594549