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 installinstalla una cartellanode_modulescompatibile con Node.js. Puoi usarlo al posto dinpm installper progetti Node.js senza alcuna modifica al codice e senza usare il runtime di Bun. - Converte automaticamente
package-lock.jsonnel formato di lockfilebun.lockdi bun, preservando le versioni delle dipendenze risolte esistenti senza alcun lavoro manuale da parte tua. Puoi usare segretamentebun installal posto dinpm installal lavoro senza che nessuno se ne accorga. - Compatibile con
.npmrc: bun install legge la configurazione del registry npm da.npmrcdi npm, quindi puoi usare la stessa configurazione sia per npm che per Bun. - Hardlink: Su Windows e Linux,
bun installusa hardlink per risparmiare spazio su disco e tempi di installazione.
# 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/bunEseguire 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.
| NPM | Bun |
|---|---|
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
# 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.tsWorkspaces? 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.
{
"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.
bun --filter 'lib-*' my-script
# invece di:
# npm run --workspace lib-foo --workspace lib-bar my-scriptAggiornare 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.
# 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 --latestVisualizzare dipendenze non aggiornate
Per visualizzare le dipendenze non aggiornate, esegui bun outdated. Questo è come npm outdated ma con un output più compatto.
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 │
└────────────────────────────────────────┴─────────┴────────┴────────┘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.
# Elenca i pacchetti installati di primo livello:
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
...# Elenca tutti i pacchetti installati:
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
...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.
# Crea un tarball
bun pm packTotal files: 46
Shasum: 2ee19b6f0c6b001358449ca0eadead703f326216
Integrity: sha512-ZV0lzWTEkGAMz[...]Gl4f8lA9sl97g==
Unpacked size: 0.41MB
Packed size: 117.50KBShebang
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.
# Forza l'uso del runtime Bun invece di node
bun --bun my-script
# Questo funziona anche:
bun run --bun my-scriptInstallazioni 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.
# Installa un pacchetto globalmente
bun i -g eslint
# Esegui un pacchetto installato globalmente senza il prefisso 'bun run'
eslint --init