Skip to content

Tutti i pacchetti scaricati dal registro vengono archiviati in una cache globale in ~/.bun/install/cache, o il percorso definito dalla variabile d'ambiente BUN_INSTALL_CACHE_DIR. Sono archiviati in sottodirectory nominate come ${name}@${version}, quindi più versioni di un pacchetto possono essere memorizzate nella cache.

Configurare il comportamento della cache

toml
[install.cache]
# la directory da usare per la cache
dir = "~/.bun/install/cache"

# quando true, non caricare dalla cache globale.
# Bun può ancora scrivere in node_modules/.cache
disable = false

# quando true, risolvi sempre le ultime versioni dal registro
disableManifest = false

Ridurre al minimo i nuovi download

Bun si impegna a evitare di scaricare più volte gli stessi pacchetti. Quando installa un pacchetto, se la cache contiene già una versione nell'intervallo specificato da package.json, Bun userà il pacchetto nella cache invece di scaricarlo di nuovo.

Dettagli sull'installazione

Se la versione semver ha un suffisso pre-release (1.0.0-beta.0) o un suffisso build (1.0.0+20220101), viene sostituito con un hash di quel valore, per ridurre le possibilità di errori associati a percorsi di file lunghi.

Quando la cartella node_modules esiste, prima di installare, Bun controlla che node_modules contenga tutti i pacchetti previsti con le versioni appropriate. Se così è, bun install viene completato. Bun usa un parser JSON personalizzato che interrompe l'analisi non appena trova "name" e "version".

Se un pacchetto manca o ha una versione incompatibile con il package.json, Bun cerca un modulo compatibile nella cache. Se trovato, viene installato in node_modules. Altrimenti, il pacchetto verrà scaricato dal registro e poi installato.


Copia veloce

Una volta che un pacchetto è scaricato nella cache, Bun deve ancora copiare quei file in node_modules. Bun usa le syscall più veloci disponibili per eseguire questo compito. Su Linux, usa hardlink; su macOS, usa clonefile.


Risparmiare spazio su disco

Poiché Bun usa hardlink per "copiare" un modulo nella directory node_modules di un progetto su Linux e Windows, i contenuti del pacchetto esistono in una singola posizione su disco, riducendo notevolmente la quantità di spazio su disco dedicata a node_modules.

Questo beneficio si applica anche a macOS, ma ci sono eccezioni. Usa clonefile che è copy-on-write, il che significa che non occuperà spazio su disco, ma conterà verso il limite dell'unità. Questo comportamento è utile se qualcosa tenta di patchare node_modules/*, quindi è impossibile influenzare altre installazioni.

Strategie di installazione

Questo comportamento è configurabile con il flag --backend, che è rispettato da tutti i comandi di gestione pacchetti di Bun.

  • hardlink: Predefinito su Linux e Windows.
  • clonefile: Predefinito su macOS.
  • clonefile_each_dir: Simile a clonefile, eccetto che clona ogni file individualmente per directory. È disponibile solo su macOS e tende a essere più lento di clonefile.
  • copyfile: Il fallback usato quando uno qualsiasi dei precedenti fallisce. È l'opzione più lenta. Su macOS, usa fcopyfile(); su Linux usa copy_file_range().
  • symlink: Attualmente usato solo per dipendenze file: (e eventualmente link:). Per prevenire loop infiniti, salta il collegamento simbolico della cartella node_modules.

Se installi con --backend=symlink, Node.js non risolverà i node_modules delle dipendenze a meno che ogni dipendenza abbia la propria cartella node_modules o passi --preserve-symlinks a node. Vedi documentazione di Node.js su --preserve-symlinks.

bash
bun install --backend symlink
node --preserve-symlinks ./foo.js

Il runtime di Bun non espone attualmente un equivalente di --preserve-symlinks.

Bun a cura di www.bunjs.com.cn