Skip to content

bun install è un client npm compatibile con Node.js progettato per essere un successore di npm incredibilmente veloce.

Abbiamo lavorato molto per assicurarci che il percorso di migrazione da npm install a bun install sia semplice come eseguire bun install invece di npm install.

  • Progettato per Node.js e Bun: bun install installa una cartella node_modules compatibile con Node.js. Puoi usarlo al posto di npm install per progetti Node.js senza alcuna modifica al codice e senza usare il runtime di Bun.
  • Converte automaticamente package-lock.json nel formato di lockfile bun.lock di bun, preservando le versioni delle dipendenze risolte esistenti senza alcun lavoro manuale da parte tua. Puoi usare segretamente bun install al posto di npm install al lavoro senza che nessuno se ne accorga.
  • Compatibile con .npmrc: bun install legge la configurazione del registry npm da .npmrc di npm, quindi puoi usare la stessa configurazione sia per npm che per Bun.
  • Hardlink: Su Windows e Linux, bun install usa hardlink per risparmiare spazio su disco e tempi di installazione.
bash
# Serve solo un comando per migrare
bun i

# Per aggiungere dipendenze:
bun i @types/bun

# Per aggiungere devDependencies:
bun i -d @types/bun

# Per rimuovere una dipendenza:
bun rm @types/bun

Eseguire script package.json più velocemente

Esegui script da package.json, eseguibili da node_modules/.bin (simile a npx) e file JavaScript/TypeScript (proprio come node) - tutto da un singolo comando semplice.

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

Quando usi bun run <executable>, sceglierà l'eseguibile installato localmente

sh
# Esegui uno script package.json:
bun my-script
bun run my-script

# Esegui un eseguibile in node_modules/.bin:
bun my-executable # come tsc, esbuild, ecc.
bun run my-executable

# Esegui un file JavaScript/TypeScript:
bun ./index.ts

Workspaces? Sì.

bun install supporta i workspace in modo simile a npm, con più funzionalità.

In package.json, puoi impostare "workspaces" su un array di percorsi relativi.

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

Filtrare script per nome workspace

In Bun, il flag --filter accetta un pattern glob ed eseguirà il comando contemporaneamente per tutti i pacchetti workspace con un name che corrisponde al pattern, rispettando l'ordine delle dipendenze.

sh
bun --filter 'lib-*' my-script
# invece di:
# npm run --workspace lib-foo --workspace lib-bar my-script

Aggiornare dipendenze

Per aggiornare una dipendenza, puoi usare bun update <package>. Questo aggiornerà la dipendenza all'ultima versione che soddisfa l'intervallo semver specificato in package.json.

sh
# Aggiorna una singola dipendenza
bun update @types/bun

# Aggiorna tutte le dipendenze
bun update

# Ignora semver, aggiorna all'ultima versione
bun update @types/bun --latest

# Aggiorna una dipendenza a una versione specifica
bun update @types/bun@1.3.3

# Aggiorna tutte le dipendenze alle ultime versioni
bun update --latest

Visualizzare dipendenze non aggiornate

Per visualizzare le dipendenze non aggiornate, esegui bun outdated. Questo è come npm outdated ma con un output più compatto.

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  │
└────────────────────────────────────────┴─────────┴────────┴────────┘

Elencare pacchetti installati

Per elencare i pacchetti installati, puoi usare bun pm ls. Questo elencherà tutti i pacchetti installati nella cartella node_modules usando il lockfile di Bun come fonte di verità. Puoi passare il flag -a per elencare tutti i pacchetti installati, incluse le dipendenze transitive.

sh
# Elenca i pacchetti installati di primo livello:
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
# Elenca tutti i pacchetti installati:
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
...

Creare un tarball di pacchetto

Per creare un tarball di pacchetto, puoi usare bun pm pack. Questo creerà un tarball del pacchetto nella directory corrente.

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

Shebang

Se il pacchetto fa riferimento a node nello shebang #!/usr/bin/env node, bun run per impostazione predefinita lo rispetterà e userà l'eseguibile node di sistema. Puoi forzarlo a usare il node di Bun passando --bun a bun run.

Quando passi --bun a bun run, creiamo un symlink all'eseguibile Bun installato localmente nominato "node" in una directory temporanea e lo aggiungiamo al tuo PATH per la durata dell'esecuzione dello script.

sh
# Forza l'uso del runtime Bun invece di node
bun --bun my-script

# Questo funziona anche:
bun run --bun my-script

Installazioni globali

Puoi installare pacchetti globalmente usando bun i -g <package>. Questo installerà in una cartella .bun/install/global/node_modules all'interno della tua home directory per impostazione predefinita.

sh
# Installa un pacchetto globalmente
bun i -g eslint

# Esegui un pacchetto installato globalmente senza il prefisso 'bun run'
eslint --init

Bun a cura di www.bunjs.com.cn