4个NPM替代品:最佳的JS包管理器和发布工具介绍

813 阅读7分钟

多年来,每个JS开发者每天都在使用使用NPM客户端安装的包,通常来自NPM注册表或组织的私有注册表。

在过去的几年里,世界在许多方面发生了变化。NPM的衰落催生了Yarn这样的工具,而注册表的多样性甚至达到了GitHub提供的程度。同时,我们构建现代应用程序的方式变得越来越模块化,强调了共享和重用代码的需要。

在这篇短文中,我将简要介绍现有的可能性,即系统地将你的系统组件变成版本包,你可以在多个项目中共享和使用。并非所有这些都是包管理器本身,但都为这个问题提供了一个很好的解决方案。

请随时评论并补充我可能错过的东西。在我的下一篇文章中,我将回顾一些最好的私有注册表替代品。但现在,让我们继续探索这些NPM的一些替代品。

1.比特

Bit不是一个软件包管理器。有了Bit,你不需要再为发布包而努力工作。有了Bit,每个应用从定义上讲都是一个多包单体,它的每一个小部分都将作为一个包发布。

在任何规模的情况下,Bit都能让它变得无比简单和高效。

有了它 比特你可以建立你的应用程序,同时它的每一个小部分都会自动成为版本,打包,并在开发过程中准备发布。然后,你'比特导出'(推送/发布)组件到安全的bit.dev 平台(与JFrog等一起使用),并使用NPM或Yarn将它们安装到其他项目中。或者,你可以选择把它发布到你选择的任何注册处。

如果你输出到bit.dev平台(它与Artifactory等一起工作),你将享受许多功能,从有组织的集合到搜索、可视化文档、预览、团队,以及自动更新的增量传播。

你的应用程序的每一部分都是一个包--自动💃

Bit在前端世界中通常用于组件(由于它使发布许多小包变得非常容易),但对于节点模块和任何可重用的JS逻辑或代码单元来说,也同样适用--甚至更好!。

以下是Bit的一些关键特性,它们使Bit成为当今最强大的 "重用JS组件/模块 "解决方案。

  • 无限的粒度水平--Bit通过自动化的煲仔饭和管理开销,使得发布几十个或几百个包变得容易。只要发布每一个你想重用的代码,这很简单,你不需要分割你的仓库或任何东西。

  • 每个repo都是一个monorepo - Bit的工作区将每个repo变成一个monorepo,并帮助你从同一个repository发布和管理许多组件,而无需管理一个monorepo的开销。

  • 自动配置和打包 - Bit抽象化了必须为每个包设置多个文件的痛苦和开销。相反,它自动为你创建、定义和更新所有配置。

  • 模板的标准化 - 使用 "比特创建 "在 repo 中开发新的包 - 这个命令可以召唤自定义的可重用模板,以标准的方式创建包(包括最佳实践)。而且,它包括基于MDX的可视化文档,有一半是自我生成的。

你的应用程序的主页现在也是一个包:

  • 自动版本管理和依赖性管理 - Bit自动定义和更新你在工作区创建的每一个包的所有依赖性,并跨越不同的项目。

它是如何工作的?

Bit,每个独立的组件都是它自己的子库。它包括它的源代码,一个包含包以及其他独立组件的依赖图,开发环境配置,以及各种构建的工件。这些人工制品之一是一个可分发的NPM包。在任何时候,你都可以直接发布你的组件,并在任何地方使用NPM/Yarn安装它们。

2.Yarn

在这一点上,Yarn真的不需要介绍。Yarn诞生于FaceBook和Google,当Yarn第一次以其炽热的速度和革命性的锁文件面世时,它在很多方面都比NPM好得多,所以它很快就在生态系统中咬了一大口。自NPM 5以来,这两个著名的软件包管理器之间几乎没有任何区别。

在性能方面,大多数人都认为Yarn享有的性能提升幅度很大。Yarn的输出被认为比npm更干净,更少言语。在Yarn 2中,有一个小小的革命,因为 "node_modules "将不再被默认支持。而且,由于Yarn只需要生成一个文本文件,而不是数以万计的文本文件,安装变得更加即时、稳定和高效。在这里阅读更多关于Yarn的具体功能。

对我来说,Yarn的真正优势在于Yarn Workspaces。工作空间的目的是使mono repo的工作变得简单,以声明的方式解决了yarn link的主要用例之一。多个项目(包)可以共同生活在同一个资源库中,并且可以相互参照--将对每个项目源代码的修改应用于其他项目。

medium.com/media/88532…

3.PNPM

那么常见的是,为什么有人要用Bit、Yarn或NPM以外的工具来发布包呢(最好是用Bit发布,用什么安装)?

这里,PNPM出现了。虽然仍然没有像之前的工具那样被广泛采用。

Pnpm与npm兼容,但更节省磁盘空间。当你安装一个软件包时,它会将其保存在你的机器上的一个全局存储中,然后从它创建一个硬链接,而不是复制。对于一个模块的每个版本,磁盘上只保留一个副本。而且它使用符号链接来引用软件包。它引入了 "内容可寻址存储 "系统,可以检测文件之间的差异,通过在版本跳跃时不复制未改变的文件来实现性能和工作流程的优化。如果你愿意,可以说是增量文件的复制。而且,它不允许包访问和乱用他们自己以外的依赖关系。

4.Turbo

除了在StackBlitz上,Turbo不是一个你今天可以在任何地方使用的软件包管理器。那么,为什么你会想知道它呢?

因为从技术和设计上来说,它在性能上是一个游戏规则的改变。我的建立是因为NPM在浏览器中的表现不好(你可以在这里阅读codesandbox是如何做到的)。让模块生态系统在浏览器中有效地工作,需要在不止一个方面进行一些新的思考。

Turbo声称其安装包的速度比Yarn和NPM快5倍。它大大减少了node_modules的大小(但它仍然存在),并完全在你的浏览器中工作--使其成为一项值得关注的技术。

Turbo使用一种解析算法来积极地解析常见的软件包版本,并减少有效载荷的大小。据作者说,无服务器版本的解析器可以在内存中访问NPM的整个数据集,并在<85ms内解析任何package.json

值得注意的是,这个生态系统已经走过了漫长的道路,像Deno(观察->)和Bit尝试->)这样的新工具将改变我们使用模块化JavaScript和在浏览器中构建的方式--将我们带向未来的一个飞跃。

介绍一下Turbo:比Yarn和NPM快5倍,并在浏览器中原生运行 🔥

就到这里吧。谢谢你的阅读!