bun install は、Node.js 互換の npm クライアントで、npm の非常に高速な後継者として設計されています。
npm install から bun install への移行パスを、npm install の代わりに bun install を実行するだけで済むほど簡単にすることに力を注いできました。
- Node.js と Bun 向けに設計:
bun installは Node.js 互換のnode_modulesフォルダをインストールします。コード変更なしに、Bun ランタイムを使用せずに Node.js プロジェクト向けにnpm installの代わりに使用できます。 - 自動的に
package-lock.jsonを変換: Bun のbun.lockロックファイル形式に自動的に変換し、既存の解決済み依存関係のバージョンを手作業なしで保持します。誰も気づかずに職場でnpm installの代わりにこっそりbun installを使用できます。 .npmrc互換: bun install は npm の.npmrcから npm レジストリ設定を読み取るため、npm と Bun の両方で同じ設定を使用できます。- ハードリンク: Windows と Linux では、
bun installはディスク容量とインストール時間を節約するためにハードリンクを使用します。
# 移行には 1 つのコマンドだけで済みます
bun i
# 依存関係を追加するには:
bun i @types/bun
# devDependencies を追加するには:
bun i -d @types/bun
# 依存関係を削除するには:
bun rm @types/bunpackage.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> を使用すると、ローカルにインストールされた実行可能ファイルが選択されます。
# 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" を相対パスの配列に設定できます。
{
"name": "my-app",
"workspaces": ["packages/*", "apps/*"]
}ワークスペース名でスクリプトをフィルタ
Bun では、--filter フラグがグロブパターンを受け付け、パターンに一致する name を持つすべてのワークスペースパッケージに対してコマンドを並列で実行し、依存関係の順序を尊重します。
bun --filter 'lib-*' my-script
# npm の場合:
# npm run --workspace lib-foo --workspace lib-bar my-script依存関係を更新
依存関係を更新するには、bun update <package> を使用できます。これにより、package.json で指定された semver 範囲を満たす最新バージョンに依存関係が更新されます。
# 単一の依存関係を更新
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 と似ていますが、よりコンパクトな出力です。
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 フラグを渡すと、推移的依存関係を含むすべてのインストール済みパッケージを一覧表示できます。
# トップレベルのインストール済みパッケージを一覧表示:
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
...# すべてのインストール済みパッケージを一覧表示:
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 が作成されます。
# tarball を作成
bun pm packTotal 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 に追加します。
# node の代わりに Bun のランタイムを強制使用
bun --bun my-script
# これも動作します:
bun run --bun my-scriptグローバルインストール
bun i -g <package> を使用してパッケージをグローバルにインストールできます。これにより、デフォルトでホームディレクトリ内の .bun/install/global/node_modules フォルダにインストールされます。
# パッケージをグローバルにインストール
bun i -g eslint
# `bun run` プレフィックスなしでグローバルにインストールされたパッケージを実行
eslint --init