全新JavaScript包管理器,速度太快了!

开发 前端
Bun 是去年爆火的一个全新 JavaScript 运行时,Github Star 一直蹭蹭的涨。不过,感觉还是看热闹的多,真正在用的又有多少呢?

最近,由 Node.js 创始人 Ryan Dahl 亲自设计并开发的更安全、更可靠的JavaScript 和 TypeScript 运行时环境 Deno 正式发布 2.0 版本。在新版本中,Deno 支持向后兼容 Node 和 npm。这样,不仅可以在当前的 Node.js 项目中运行 Deno,还可以逐步采用 Deno 的一体化工具链。因此,现在我们可以将 Deno 作为一个 JavaScript 包管理器单独使用。与此同时,去年备受瞩目的全新 JavaScript 运行时 Bun,同样支持作为 JavaScript 包管理器独立使用。下面就来深入了解一下这两个很新的 JavaScript 包管理器!

Deno

Deno 2 与 Node 和 npm 的兼容性非常强。Deno 2 能够理解 package.json、node_modules文件夹甚至 npm 工作区,因此可以在使用 ESM 的任何 Node 项目中运行 Deno。

图片图片

依赖源

Deno 不仅支持从 npm 和 JSR 等源添加依赖项,还允许通过 URL 直接加载模块。这种灵活性使得开发者可以轻松地集成来自不同源的代码库,而无需担心兼容性问题。同时,Deno 还提供了对 monorepo 的支持,使得在同一个仓库中管理多个项目变得容易。

JSR:Deno 推出的全新 JavaScript 注册表,类似于 npm,官网:https://jsr.io/。

命令

Deno 2 不仅支持package.json和node_modules文件,还附带三个重要的子命令,可让轻松安装和管理依赖项。包括:

  • deno install:用于安装配置文件中列出的所有依赖项。这个命令类似于npm的npm install。
  • deno remove:用于从项目的配置文件中删除依赖项。这个命令可以同时处理deno.json和package.json中的依赖项。
  • deno add:用于将依赖项添加到项目的配置文件中,这些配置文件可以是deno.json或package.json。这个命令会根据提供的依赖类型(npm或JSR)将依赖项添加到相应的配置文件中。

性能

Deno 使用硬链接(在Linux上)和clonefile(在macOS上)来优化空间和速度。这种设计避免了冗余副本,同时在多个位置显示相同的文件,从而最小化磁盘使用量,并加快安装速度。特别是在 monorepos 或具有共享依赖项的项目中,这种性能提升尤为明显。

经过测试,deno install 在没有缓存的情况下比 npm install 快 15 %, 在有缓存的情况下比 npm install 快 90%,甚至比 Bun 还要快。

测试结果由 Deno 官方提供测试结果由 Deno 官方提供

新功能

除此上面提到的功能,Deno 团队还在不断开发新功能,包括deno update和deno outdated等,这些功能将进一步增强Deno的包管理能力。

Bun

Bun 是去年爆火的一个全新 JavaScript 运行时,Github Star 一直蹭蹭的涨。不过,感觉还是看热闹的多,真正在用的又有多少呢?不过,Bun 致力于打造一个全能的 JavaScript 工具链,官方把它成为 all-in-one 工具,这个点还是很吸引的人的。当然,Bun 是可以单独作为一个 JavaScript 包管理工具使用的。

图片图片

作为一个 JavaScript 包管理工具,Bun 的特点如下:

  • Node.js 兼容性:Bun包管理器设计为可以与Node.js项目兼容。它可以在任何包含package.json的项目中使用,并支持工作区(workspaces)、Git/HTTP/tarball依赖项、自定义注册表等。这意味着,即使不使用Bun运行时,也可以使用Bun包管理器来管理 Node.js 项目依赖项。
  • 支持工作区:Bun 原生支持工作区。它会读取 package.json 中的 workspaces ,并一次性安装所有工作区包。
  • 全局安装缓存:当安装一个包时,Bun会将其下载到一个全局包缓存中。在未来的安装中,Bun会首先检查缓存,以避免不必要的重新下载。
  • 优化的文件写入:当从缓存中写入文件到node_modules时,Bun使用操作系统上可用的最快系统调用。这比像pnpm那样简单地从全局缓存创建符号链接要快得多。
  • 熟悉的API:Bun的API对于npm、pnpm或yarn的用户来说看起来会很熟悉。可以安装大型项目的所有依赖项,添加或删除生产、开发或对等依赖项,并指定版本、版本范围或标签。
  • 二进制锁文件:安装完成后,Bun会创建一个二进制bun.lockb文件。二进制格式使得读取和解析比基于JSON或Yaml的锁文件快得多。锁文件存储了每个依赖项的解析版本和解析依赖树的元数据,使得未来的安装几乎可以立即完成。
  • 默认安全性:Bun 不会随意运行 postinstall 脚本。一组流行的包会自动进行预验证;其他包可以使用package.json中的privilegedDependencies字段进行白名单处理。

下面是 Bun 与其他热门 JavaScript 包管理工具在有缓存的情况下的性能对比:

图片图片

测试结果由 Bun 官方提供

责任编辑:武晓燕 来源: 前端充电宝
相关推荐

2020-03-09 11:43:35

RustCargo编程语言

2020-12-03 12:06:54

HarmonyOS

2019-02-19 08:46:57

物联网IOT物联网设备

2010-10-08 09:26:17

.NET微软

2023-04-17 07:36:28

Arch LinuxGUI

2010-01-06 16:33:24

Ubuntu软件包

2018-08-23 16:51:40

Linux软件仓库包管理器

2021-07-27 12:58:46

Linux包管理器安命令

2016-09-12 15:00:46

Linux包管理器新手

2010-05-27 10:12:46

openSUSEYaST

2022-03-21 21:28:00

Homebrew包管理器Linux

2010-01-05 10:14:09

Ubuntu软件包

2013-11-20 15:32:13

红帽RedHatYUM包

2018-10-15 15:00:42

UnixSysget包管理器

2022-02-28 10:22:08

前端管理工具

2024-01-22 06:55:09

BiomeWeb 应用Prettier

2024-02-26 10:30:27

Biome开发前端

2009-02-20 10:54:24

Windows 7游戏管理器全新

2021-11-11 11:13:20

js Npm基础

2021-12-09 09:27:22

MacOSHomebrew包管理器
点赞
收藏

51CTO技术栈公众号