Skip to content

bun install 是一個與 Node.js 兼容的 npm 客戶端,旨在成為 npm 的超快速替代品。

我們做了大量工作,確保從 npm installbun install 的遷移路徑像運行 bun install 而不是 npm install 一樣簡單。

  • 專為 Node.js 和 Bun 設計bun install 安裝與 Node.js 兼容的 node_modules 文件夾。你可以在 Node.js 項目中用它替代 npm install,無需任何代碼更改,也無需使用 Bun 運行時。
  • 自動轉換 package-lock.json:將 npm 的 package-lock.json 自動轉換為 Bun 的 bun.lock 鎖文件格式,保留你現有的已解析依賴版本,無需任何手動操作。你可以在工作中秘密地使用 bun install 替代 npm install,而不會有人注意到。
  • .npmrc 兼容:bun install 從 npm 的 .npmrc 讀取 npm 注冊表配置,因此你可以為 npm 和 Bun 使用相同的配置。
  • 硬鏈接:在 Windows 和 Linux 上,bun install 使用硬鏈接來節省磁盤空間和安裝時間。
bash
# 遷移只需要一個命令
bun i

# 添加依賴:
bun i @types/bun

# 添加開發依賴:
bun i -d @types/bun

# 移除依賴:
bun rm @types/bun

更快地運行 package.json 腳本

運行 package.json 中的腳本、node_modules/.bin 中的可執行文件(類似於 npx),以及 JavaScript/TypeScript 文件(就像 node 一樣)——所有這些都可以通過一個簡單的命令完成。

NPMBun
npm run <script>bun <script>
npm exec <bin>bun <bin>
node <file>bun <file>
npx <package>bunx <package>

當你使用 bun run <executable> 時,它會選擇本地安裝的可執行文件

sh
# 運行 package.json 腳本:
bun my-script
bun run my-script

# 運行 node_modules/.bin 中的可執行文件:
bun my-executable # 例如 tsc, esbuild 等
bun run my-executable

# 運行 JavaScript/TypeScript 文件:
bun ./index.ts

工作空間?有的。

bun install 支持工作空間,類似於 npm,但具有更多功能。

在 package.json 中,你可以將 "workspaces" 設置為相對路徑數組。

json
{
  "name": "my-app",
  "workspaces": ["packages/*", "apps/*"]
}

按工作空間名稱過濾腳本

在 Bun 中,--filter 標志接受 glob 模式,並會為所有 name 匹配該模式的工作空間包並發運行命令,同時尊重依賴順序。

sh
bun --filter 'lib-*' my-script
# 而不是:
# npm run --workspace lib-foo --workspace lib-bar my-script

更新依賴

要更新依賴,你可以使用 bun update <package>。這會將依賴更新到滿足 package.json 中指定的 semver 范圍的最新版本。

sh
# 更新單個依賴
bun update @types/bun

# 更新所有依賴
bun update

# 忽略 semver,更新到最新版本
bun update @types/bun --latest

# 將依賴更新到特定版本
bun update @types/bun@1.3.3

# 將所有依賴更新到最新版本
bun update --latest

查看過時的依賴

要查看過時的依賴,運行 bun outdated。這類似於 npm outdated,但輸出更緊湊。

sh
bun outdated
txt
┌────────────────────────────────────────┬─────────┬────────┬────────┐
│ Package                                │ Current │ Update │ Latest │
├────────────────────────────────────────┼─────────┼────────┼────────┤
│ @types/bun (dev)                       │ 1.1.6   │ 1.1.10 │ 1.1.10 │
├────────────────────────────────────────┼─────────┼────────┼────────┤
│ @types/react (dev)                     │ 18.3.3  │ 18.3.8 │ 18.3.8 │
├────────────────────────────────────────┼─────────┼────────┼────────┤
│ @typescript-eslint/eslint-plugin (dev) │ 7.16.1  │ 7.18.0 │ 8.6.0  │
├────────────────────────────────────────┼─────────┼────────┼────────┤
│ @typescript-eslint/parser (dev)        │ 7.16.1  │ 7.18.0 │ 8.6.0  │
├────────────────────────────────────────┼─────────┼────────┼────────┤
│ @vscode/debugadapter (dev)             │ 1.66.0  │ 1.67.0 │ 1.67.0 │
├────────────────────────────────────────┼─────────┼────────┼────────┤
│ esbuild (dev)                          │ 0.21.5  │ 0.21.5 │ 0.24.0 │
├────────────────────────────────────────┼─────────┼────────┼────────┤
│ eslint (dev)                           │ 9.7.0   │ 9.11.0 │ 9.11.0 │
├────────────────────────────────────────┼─────────┼────────┼────────┤
│ mitata (dev)                           │ 0.1.11  │ 0.1.14 │ 1.0.2  │
├────────────────────────────────────────┼─────────┼────────┼────────┤
│ prettier-plugin-organize-imports (dev) │ 4.0.0   │ 4.1.0  │ 4.1.0  │
├────────────────────────────────────────┼─────────┼────────┼────────┤
│ source-map-js (dev)                    │ 1.2.0   │ 1.2.1  │ 1.2.1  │
├────────────────────────────────────────┼─────────┼────────┼────────┤
│ typescript (dev)                       │ 5.5.3   │ 5.6.2  │ 5.6.2  │
└────────────────────────────────────────┴─────────┴────────┴────────┘

列出已安裝的包

要列出已安裝的包,你可以使用 bun pm ls。這將使用 Bun 的鎖文件作為真實來源,列出 node_modules 文件夾中安裝的所有包。你可以傳遞 -a 標志來列出所有已安裝的包,包括傳遞依賴。

sh
# 列出頂層已安裝的包:
bun pm ls
txt
my-pkg node_modules (781)
├── @types/node@20.16.5
├── @types/react@18.3.8
├── @types/react-dom@18.3.0
├── eslint@8.57.1
├── eslint-config-next@14.2.8
...
sh
# 列出所有已安裝的包:
bun pm ls -a
txt
my-pkg node_modules
├── @alloc/quick-lru@5.2.0
├── @isaacs/cliui@8.0.2
│   └── strip-ansi@7.1.0
│       └── ansi-regex@6.1.0
├── @jridgewell/gen-mapping@0.3.5
├── @jridgewell/resolve-uri@3.1.2
...

創建包 tarball

要創建包 tarball,你可以使用 bun pm pack。這將在當前目錄中創建包的 tarball。

sh
# 創建 tarball
bun pm pack
txt
Total files: 46
Shasum: 2ee19b6f0c6b001358449ca0eadead703f326216
Integrity: sha512-ZV0lzWTEkGAMz[...]Gl4f8lA9sl97g==
Unpacked size: 0.41MB
Packed size: 117.50KB

Shebang

如果包在 #!/usr/bin/env node shebang 中引用了 nodebun run 默認會尊重它並使用系統的 node 可執行文件。你可以通過向 bun run 傳遞 --bun 來強制它使用 Bun 的 node

當你向 bun run 傳遞 --bun 時,我們會在臨時目錄中創建一個指向本地安裝的 Bun 可執行文件的符號鏈接,名為 "node",並在腳本執行期間將其添加到你的 PATH 中。

sh
# 強制使用 Bun 運行時而不是 node
bun --bun my-script

# 這也適用:
bun run --bun my-script

全局安裝

你可以使用 bun i -g <package> 全局安裝包。默認情況下,這將安裝到你主目錄下的 .bun/install/global/node_modules 文件夾中。

sh
# 全局安裝包
bun i -g eslint

# 運行全局安裝的包,無需 `bun run` 前綴
eslint --init

Bun學習網由www.bunjs.com.cn整理維護