bun install 是一個與 Node.js 相容的 npm 客戶端,旨在成為 npm 的極速替代品。
我們已投入大量精力確保從 npm install 遷移到 bun install 的路徑儘可能簡單,只需將 npm install 替換為 bun install 即可。
- 為 Node.js 和 Bun 設計:
bun install安裝一個與 Node.js 相容的node_modules資料夾。您可以在 Node.js 專案中替代npm install使用它,無需任何程式碼更改,也無需使用 Bun 的執行時。 - 自動將
package-lock.json轉換為 bun 的bun.lock鎖定檔案格式,無需您進行任何手動操作即可保留現有已解析的依賴版本。您可以在工作中秘密使用bun install替代npm install,而不會被任何人發現。 .npmrc相容:bun install 會從 npm 的.npmrc讀取 npm 登錄檔配置,因此您可以為 npm 和 Bun 使用相同的配置。- 硬連結:在 Windows 和 Linux 上,
bun install使用硬連結來節省磁碟空間和安裝時間。
# It only takes one command to migratebun i
# To add dependencies:bun i @types/bun
# To add devDependencies:bun i -d @types/bun
# To remove a dependency:bun rm @types/bun更快地執行 package.json 指令碼
執行 package.json 中的指令碼、node_modules/.bin 中的可執行檔案(有點像 npx)以及 JavaScript/TypeScript 檔案(就像 node)——所有這些都只需一個簡單的命令。
| NPM | Bun |
|---|---|
npm run <script> | bun <script> |
npm exec <bin> | bun <bin> |
node <file> | bun <file> |
npx <package> | bunx <package> |
當您使用 bun run <executable> 時,它將選擇本地安裝的可執行檔案。
# Run a package.json script:bun my-scriptbun run my-script
# Run an executable in node_modules/.bin:bun my-executable # such as tsc, esbuild, etc.bun run my-executable
# Run a JavaScript/TypeScript file:bun ./index.ts{
"name": "my-app",
"workspaces": ["packages/*", "apps/*"]
}
按工作區名稱篩選指令碼
在 Bun 中,--filter 標誌接受一個 glob 模式,並將為所有名稱與該模式匹配的工作區包併發執行命令,同時遵循依賴順序。
bun --filter 'lib-*' my-script# instead of:
# npm run --workspace lib-foo --workspace lib-bar my-script更新依賴項
要更新依賴項,您可以使用 bun update <package>。這將把依賴項更新到滿足 package.json 中指定語義版本範圍的最新版本。
# Update a single dependencybun update @types/bun
# Update all dependenciesbun update
# Ignore semver, update to the latest versionbun update @types/bun --latest
# Update a dependency to a specific versionbun update @types/bun@1.3.0
# Update all dependencies to the latest versionsbun update --latest檢視過時的依賴項
要檢視過時的依賴項,請執行 bun outdated。這類似於 npm outdated,但輸出更緊湊。
bun outdated┌────────────────────────────────────────┬─────────┬────────┬────────┐
│ 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 標誌以列出所有已安裝的包,包括傳遞依賴項。
# List top-level installed packages:bun pm lsmy-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
# List all installed packages:bun pm ls -amy-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。
# Create a tarballbun pm pack
Total files: 46
Shasum: 2ee19b6f0c6b001358449ca0eadead703f326216
Integrity: sha512-ZV0lzWTEkGAMz[...]Gl4f8lA9sl97g==
Unpacked size: 0.41MB
Packed size: 117.50KBShebang
如果包在 #!/usr/bin/env node shebang 中引用了 node,則 bun run 預設會尊重它並使用系統的 node 可執行檔案。您可以透過向 bun run 傳遞 --bun 來強制它使用 Bun 的 node。
當您向 bun run 傳遞 --bun 時,我們會在臨時目錄中建立一個指向本地安裝的 Bun 可執行檔案(名為 "node")的符號連結,並在指令碼執行期間將其新增到您的 PATH 中。
# Force using Bun's runtime instead of nodebun --bun my-script
# This also works:bun run --bun my-script全域性安裝
您可以使用 bun i -g <package> 全域性安裝包。預設情況下,這會安裝到您的主目錄中的 .bun/install/global/node_modules 資料夾。
# Install a package globallybun i -g eslint
# Run a globally-installed package without the `bun run` prefixeslint --init