Come installare e utilizzare Yarn per progetti JavaScript moderni

Ultimo aggiornamento: 04/24/2026
  • Yarn utilizza un modello a due livelli: una CLI globale e una versione specifica per il progetto, al fine di garantire un comportamento coerente.
  • Le installazioni deterministiche con yarn.lock e la memorizzazione nella cache aggressiva garantiscono una gestione delle dipendenze rapida e riproducibile.
  • La versione moderna di Yarn Berry aggiunge funzionalità PnP, aree di lavoro e il file .yarnrc.yml per una maggiore flessibilità nel collegamento, nella memorizzazione nella cache e nell'integrazione con editor e sistemi di integrazione continua (CI).
  • Una corretta configurazione del PATH, la gestione dei file di blocco e la gestione della cache sono essenziali per evitare i problemi di installazione più comuni.

Installare Yarn JavaScript

Se stai cercando di installare Yarn per i tuoi progetti JavaScript e ti senti un po' disorientato tra le tante opzioni, non sei il solo. Yarn si è evoluto molto negli ultimi anni, coesiste con npm e esistono diverse versioni e procedure di installazione a seconda del sistema operativo e persino dello stile di progetto utilizzato (monorepo, PnP, node_modules classico e così via).

La buona notizia è che, una volta compreso come viene installato Yarn e come funziona il suo modello a due livelli (CLI globale + Yarn specifico per il progetto), tutto comincia ad avere un senso. In questa guida analizzeremo nel dettaglio come installare Yarn sui sistemi più comuni, come integrarlo in un progetto JavaScript reale, cosa lo differenzia da npm e come risolvere i problemi tipici che si presentano al primo utilizzo.

Cos'è Yarn e perché è ancora importante per i progetti JavaScript

Yarn è un gestore di pacchetti per Node.js progettato con tre obiettivi principali: velocità, sicurezza e installazioni deterministiche. È nato come alternativa a npm in un periodo in cui npm presentava problemi di prestazioni e affidabilità, e sebbene npm sia migliorato molto da allora, Yarn rimane estremamente popolare, soprattutto nell'ambito di React e dei moderni stack frontend.

Uno dei punti di forza principali di Yarn è il suo processo di installazione deterministico, basato su yarn.lock file. Questo file corregge le versioni esatte di tutte le dipendenze dirette e transitive, in modo che l'installazione su macchine o server CI diversi produca sempre lo stesso albero delle dipendenze, eliminando il classico problema "funziona solo sul mio portatile".

Un'altra caratteristica distintiva è il suo comportamento aggressivo in termini di caching, che consente a Yarn di riutilizzare qualsiasi pacchetto già scaricato. Grazie a ciò, le installazioni ripetute sono notevolmente più veloci e Yarn può persino funzionare in modalità offline se tutti i pacchetti necessari sono stati precedentemente memorizzati nella cache.

Modern Yarn (spesso chiamato "Berry" per le versioni 2.x, 3.x e 4.x) offre funzionalità avanzate aggiuntive come Plug'n'Play (PnP) e aree di lavoro. PnP può eliminare completamente il tradizionale node_modules sostituendo la cartella con file manifest che indicano a Node.js esattamente dove si trova ogni pacchetto, risparmiando molto spazio su disco e velocizzando alcune operazioni. Gli spazi di lavoro, d'altra parte, sono perfetti per i monorepo, collegando più pacchetti in un unico repository con un file di blocco condiviso e una gestione centralizzata delle dipendenze.

Dal punto di vista della sicurezza, Yarn verifica i checksum di ogni pacchetto prima che venga eseguito. Questa convalida dell'integrità aggiunge un ulteriore livello di protezione contro artefatti corrotti o manomessi, il che risulta particolarmente utile in ambienti aziendali o sensibili.

Capire la differenza tra Yarn Classic e Yarn Berry (filato moderno)

Filato Classico e Berry

Prima di parlare dell'installazione, è fondamentale capire che esistono due grandi famiglie di filati: Classic (1.x) e Berry (2.x/3.x/4.x). Yarn Classic vive nel suo archivio storico e riceve solo correzioni di sicurezza, mentre tutto lo sviluppo attivo si concentra sulla linea Berry più recente ospitata nel yarnpkg/berry riposo.

Yarn Classic (circa 1.22) è ciò che la maggior parte delle persone ottiene ancora quando installa la versione globale yarn Interfaccia a riga di comando con npm. Oggigiorno, la CLI globale funge principalmente da launcher: all'interno di un progetto configurato con Berry, il comando globale delega semplicemente l'esecuzione alla versione locale di Yarn specifica del progetto, consentendo di aggiornare la toolchain del progetto senza dover intervenire sugli strumenti globali.

Yarn Berry introduce profondi cambiamenti architetturali, in particolare la funzionalità Plug'n'Play e un potente sistema di plugin. Per impostazione predefinita, Berry preferisce PnP invece di node_modules, supporta flussi di lavoro di installazione zero (dipendenze inserite nel repository) e consente una configurazione granulare tramite .yarnrc.yml, tra cui il modo in cui i moduli vengono collegati, come vengono gestite le cache o come vengono definiti i registri e i proxy.

Gli stessi manutentori di Yarn raccomandano vivamente di migrare dalla versione 1.x all'ultima release di Berry, ove possibile. Le versioni moderne sono state mantenute attivamente per più tempo, risolvono intere classi di problemi presenti in Classic e offrono flessibilità di configurazione attraverso nodeLinker impostazione in modo da poter ancora utilizzare il classico node_modules layout o collegamenti simbolici in stile pnpm quando PnP non è adatto.

Se il tuo ecosistema o i tuoi strumenti non sono ancora pronti per il PnP, non preoccuparti, non sei bloccato. Semplicemente impostando nodeLinker: node-modules in .yarnrc.ymlBerry si comporta in modo più simile alle tradizionali installazioni npm, pur mantenendo il suo file di blocco deterministico, il comportamento di caching e un'esperienza CLI migliorata.

Requisiti di sistema e strategia globale di installazione del filato

A prescindere dal sistema operativo, il requisito imprescindibile per Yarn è l'installazione di Node.js. Yarn è una CLI basata su Node e dipende da Node per funzionare, quindi dovresti prima verificare che Node sia disponibile con un rapido node -v nel tuo terminale. Se invece di un errore "comando non trovato" visualizzi un numero di versione, puoi procedere.

Se Node.js non è presente o è obsoleto, installalo o aggiornalo utilizzando il metodo consigliato per la tua piattaforma. Su Linux si possono utilizzare pacchetti di distribuzione o repository NodeSource, su macOS si possono preferire Homebrew, MacPorts o nvm, mentre su Windows si può utilizzare il programma di installazione ufficiale o un gestore di pacchetti come Chocolatey o Scoop. Molti flussi di lavoro Yarn presuppongono almeno Node 14.18, mentre per Berry la versione ideale è solitamente Node 16 o 18 LTS.

Gli autori di Yarn raccomandano un modello di installazione a due livelli. Innanzitutto, installa un globale yarn Eseguire il comando CLI una volta (più comunemente tramite npm) e poi, all'interno di ciascun progetto, utilizzare quel comando globale per configurare una versione di Yarn specifica per il progetto, che risiede direttamente nel repository. Questo garantisce che tutti i collaboratori e i job di CI eseguano esattamente la stessa versione di Yarn definita dal progetto.

L'installazione della CLI globale di Yarn tramite npm è semplice. Poiché npm viene fornito di default con Node.js, è possibile eseguire:

sudo npm install -g yarn

Una volta completata l'installazione, verificare che la CLI globale sia raggiungibile. Esegui:

yarn --version

Se vedi qualcosa come 1.22.x, ovvero il launcher Classic globale funziona correttamente. D'ora in poi, quando entrerai in un progetto che utilizza Berry, questo comando globale trasferirà in modo trasparente il controllo alla release di Yarn configurata localmente e memorizzata nel repository.

Installazione di Yarn in uno specifico progetto JavaScript

Con la CLI globale pronta, il passo successivo è "associare" una specifica versione di Yarn a ciascun progetto. È proprio questo che garantisce la coerenza tra le macchine dei tuoi colleghi e le tue pipeline CI/CD: tutti eseguono lo stesso binario di Yarn e quindi condividono lo stesso comportamento.

Inizia navigando nella directory del tuo progetto (oppure creane una nuova se stai avviando una nuova applicazione). Per esempio:

mkdir my-project
cd my-project

All'interno di quella cartella, usa lo speciale yarn set version comando per selezionare una versione moderna di Berry. Una scelta tipica è quella di seguire la linea "berry" attivamente sviluppata:

yarn set version berry

Dietro le quinte, Yarn risolve "berry" nell'ultimo binario di Berry, lo scarica e lo memorizza all'interno di un .yarn/releases directory nel tuo progetto. Allo stesso tempo, crea o aggiorna un .yarnrc.yml È necessario inserire un file nella directory principale del progetto per indicare al launcher globale di delegare l'utilizzo a quel binario locale.

Se ora corri yarn --version Di nuovo dall'interno del progetto, l'output cambierà nella versione bloccata del progetto. Potresti vedere qualcosa del genere 4.5.0 o un'altra versione 3.x/4.x, a indicare che non si sta più utilizzando la CLI Classic globale, ma quella locale di Berry ospitata nel proprio repository.

Da questo momento in poi, ogni comando Yarn eseguito in quella directory (o nelle sue sottodirectory) utilizzerà la versione di Yarn specifica del progetto. Ciò consente a un team di migrare gradualmente diversi progetti a versioni più recenti di Yarn, secondo i propri ritmi, pur mantenendo un unico launcher globale installato sui computer degli sviluppatori.

Comandi base per la lavorazione del filato per lo sviluppo quotidiano

Una volta installato Yarn e integrato nel tuo progetto, ti basterà un piccolo sottoinsieme di comandi per gestire la maggior parte delle attività quotidiane. L'interfaccia a riga di comando è estesa, ma già pochi sottocomandi permettono di gestire efficacemente dipendenze e script.

Ogni volta che ti senti bloccato o desideri esplorare ulteriori opzioni, ogni comando accetta un flag di aiuto. Esecuzione:

yarn --help

stampa la guida generale, mentre aggiunge --help dopo uno specifico sottocomando vengono forniti suggerimenti contestuali sull'utilizzo. Per esempio, yarn install --help Spiega tutti i flag disponibili per il processo di installazione delle dipendenze.

Per avviare un progetto completamente nuovo, puoi chiedere a Yarn di generare i file di configurazione di base. All'interno di una cartella vuota, è sufficiente eseguire il seguente comando:

yarn init

Quel comando ti guida attraverso alcuni prompt e scrive un package.json più un yarn.lock file. Il primo dichiara i metadati del progetto, gli script e le dipendenze, mentre il secondo funge da record canonico delle versioni esatte che Yarn ha risolto al momento dell'installazione.

Quando si entra a far parte di un repository esistente che utilizza già Yarn, il punto di partenza tipico è l'installazione di tutte le dipendenze. Dalla directory principale del progetto, è sufficiente eseguire:

yarn install

Il filato quindi legge package.json e yarn.lockscarica tutto ciò che manca e imposta l'albero delle dipendenze. Grazie alla cache, le installazioni successive, anche in ambienti di integrazione continua (CI), saranno molto più veloci della prima esecuzione.

Aggiungere nuove dipendenze è altrettanto semplice con add sottocomando. Per installare, ad esempio, Express, si procederebbe come segue:

yarn add express

Questo singolo comando scarica il pacchetto e lo aggiorna. package.json e rinfresca yarn.lock. Non è necessario modificare manualmente i file JSON; Yarn mantiene sincronizzati per te gli intervalli dichiarati e le versioni bloccate.

Verifica rapida di fattibilità: Piccolo server express con filato

Se vuoi essere assolutamente certo che Yarn funzioni come previsto, puoi scrivere un piccolo test di base usando Express. Supponendo che tu sia all'interno di un progetto e che tu abbia già eseguito yarn add express, crea un file denominato index.js con il seguente server minimo:

const express = require("express");
const app = express();

app.get("/", (req, res) => res.send("Yarn is working!"));

app.listen(3000, () => console.log("Server running on http://localhost:3000"));

Anziché richiamare Node direttamente, è possibile eseguire questo script tramite Yarn, il che può risultare comodo negli ambienti PnP. Utilizzo:

yarn node index.js

Apri un altro terminale e verifica che il server risponda correttamente. Una semplice:

curl http://localhost:3000

dovrebbe restituire il messaggio "Yarn sta funzionando!". Se ciò accade, significa che Yarn ha risolto la dipendenza, configurato la risoluzione del modulo ed eseguito lo script senza problemi.

Gestione delle dipendenze, degli script e della cache di Yarn

Oltre all'installazione e alle aggiunte di base, Yarn mette a disposizione diverse utility per gestire e far evolvere il grafico delle dipendenze in modo ordinato. Questi comandi evitano la modifica manuale e mantengono package.json e yarn.lock essere sempre coerente.

Per rimuovere una dipendenza di cui non hai più bisogno, usa il remove sottocomando. Per esempio:

yarn remove package-name

Yarn disinstallerà il pacchetto, lo rilascerà da package.jsone aggiornare di conseguenza il file di blocco. Ciò impedisce che moduli obsoleti o inutilizzati rimangano nell'albero delle dipendenze.

L'aggiornamento delle dipendenze può essere effettuato in blocco o per un pacchetto specifico. Senza argomenti,

yarn upgrade

risolve le versioni più recenti compatibili in base agli intervalli dichiarati, mentre:

yarn upgrade package-name

mira a una singola dipendenza. In entrambi i casi, Yarn riscrive yarn.lock per riflettere il grafico delle dipendenze aggiornato.

Quando il tuo progetto definisce gli script in package.json, Filato run Il sottocomando è il modo per eseguirli. Uno script come:

"scripts": {
  "start": "node index.js"
}

può essere avviato con:

yarn run start

e in molti casi il più breve yarn start Anche l'alias funziona. Questo fornisce un livello di astrazione pulito sopra Node o altri strumenti, indipendentemente dalla strategia di collegamento dei moduli sottostante.

Yarn mantiene una cache locale o globale di tutti i pacchetti scaricati in precedenza per velocizzare le installazioni e garantire il funzionamento offline. A volte, soprattutto dopo esperimenti o cambi di versione multipli, la cache può diventare rumorosa o corrotta. Ogni volta che sospetti problemi con la cache, puoi reimpostarla con:

yarn cache clean

Se sei curioso di sapere dove Yarn memorizza questi artefatti nella cache, yarn cache dir stampa la posizione. Questo è particolarmente utile quando è necessario inserire la cartella della cache nella lista bianca di un antivirus su Windows per evitare installazioni lente causate da una scansione aggressiva di ogni file scaricato.

Configurazione di Yarn tramite .yarnrc.yml

Modern Yarn centralizza la configurazione del progetto nel .yarnrc.yml file. Questo documento YAML controlla il modo in cui vengono collegate le dipendenze, la posizione delle cache, il livello di rigore del PnP, gli URL del registro, la telemetria e altro ancora.

Una configurazione tipica potrebbe essere la seguente:

nodeLinker: pnp
pnpMode: strict
compressionLevel: mixed
enableGlobalCache: true
enableTelemetry: false

Migliori nodeLinker L'impostazione è particolarmente importante perché definisce come vengono risolti i moduli. Le opzioni valide includono pnp (Plug'n'Play senza node_modules cartella), node-modules (layout classico) e a volte un linker in stile pnpm. Se riscontri problemi di compatibilità con strumenti che codificano in modo rigido node_modules presupposti, passando a node-modules spesso li risolve.

compressionLevel Indica a Yarn con quale livello di aggressività deve comprimere i pacchetti memorizzati nella cache. Un valore di 0 disabilita completamente la compressione per la massima velocità, 1 impone la compressione completa per un utilizzo minimo del disco e mixed Trova un equilibrio tra i due mondi, che tende ad essere la scelta più sensata per la maggior parte dei team.

Abilitare enableGlobalCache Fa sì che Yarn riutilizzi una directory di cache condivisa tra più progetti. In questo modo, se più repository dipendono dalle stesse librerie, Yarn evita di scaricarle più volte, risparmiando sia larghezza di banda di rete che spazio su disco.

Infine, enableTelemetry Controlla se Yarn invia informazioni anonime sull'utilizzo ai manutentori. Molte aziende preferiscono disattivare questa opzione per motivi di privacy e conformità, mentre altre la lasciano attiva per guidare la roadmap del progetto; in entrambi i casi, si tratta semplicemente di un flag in questo file di configurazione.

Integrazione con Git: cosa includere nel commit e cosa ignorare

Poiché Yarn conserva parte dei suoi macchinari all'interno di un .yarn directory, è importante essere precisi su cosa includere nel controllo di versione. Alcuni di questi file dovrebbero assolutamente essere tracciati, mentre altri sono artefatti di cache o di compilazione che non farebbero altro che appesantire il repository.

Un minimo .gitignore La strategia utilizzata in molti progetti di Berry si presenta così:

.yarn/*
!.yarn/patches
!.yarn/plugins
!.yarn/releases
!.yarn/sdks
!.yarn/versions
.pnp.*

Questo schema ignora l'intero .yarn cartella ma poi inserisce nella whitelist le sottocartelle che devono essere confermate. Migliori releases La directory, ad esempio, contiene il binario Yarn specifico del progetto; senza di essa, altri sviluppatori potrebbero non ottenere esattamente la stessa versione della CLI quando clonano il repository.

Altri percorsi consentiti come .yarn/plugins or .yarn/sdks supportano plugin personalizzati e integrazioni con editor. Mantenere il sistema sotto controllo di versione garantisce che tutti i membri del team condividano lo stesso set di plugin e lo stesso supporto per gli strumenti di programmazione.

Migliori .pnp.* Le voci corrispondono ai file manifest Plug'n'Play che descrivono l'albero delle dipendenze se si utilizza la modalità PnP. Il commit di questi file è essenziale per flussi di lavoro riproducibili e talvolta persino senza installazione, in cui la CI o i nuovi cloni possono eseguire il progetto immediatamente senza dover rigenerare i manifest.

Oltre a questo, ricorda che yarn.lock è un elemento di primaria importanza nel tuo repository. Deve essere sempre sottoposto a commit e aggiornato in concomitanza con le modifiche alle dipendenze, altrimenti tutti i vantaggi del determinismo offerti da Yarn scompaiono.

Filato contro npm: quando il filato brilla davvero

Yarn e npm risolvono lo stesso problema fondamentale: la gestione delle dipendenze di Node.js, ma Yarn si differenzia in diversi scenari pratici. La differenza più evidente è spesso nelle prestazioni: grazie a installazioni parallele e a una gestione della cache più intelligente, Yarn completa frequentemente le installazioni in tempi significativamente più rapidi nei progetti di grandi dimensioni.

Un altro punto di forza è l'utilizzo del disco, soprattutto se si adotta la strategia PnP. Eliminando node_modulesUn progetto tipico può consumare molto meno spazio su disco e gli strumenti che si integrano bene con PnP possono beneficiare di risoluzioni dei moduli più rapide, poiché Node non deve più attraversare alberi di directory profondi e ripetitivi.

In termini di comportamento del file di blocco, Yarn yarn.lock è ampiamente apprezzato per la sua compattezza e l'elevato grado di determinismo. Registra in modo esplicito le decisioni di risoluzione, facilitando la comprensione del motivo per cui è stata scelta una determinata versione e consentendo di individuare e risolvere i conflitti tra le versioni.

I monorepo sono un ambito in cui Yarn è da tempo all'avanguardia grazie alla sua funzionalità di spazi di lavoro. Grazie agli spazi di lavoro, più pacchetti in un singolo repository condividono un file di blocco, le dipendenze vengono gestite in modo efficiente e i pacchetti locali vengono collegati automaticamente senza necessità di configurazioni complesse.

Esempi concreti in cui Yarn si distingue si annoverano spesso configurazioni CI/CD complesse, grandi codebase condivise o ambienti protetti da proxy aziendali e certificati personalizzati. Ad esempio, correre yarn install --immutable all'interno di CI garantisce che l'installazione fallirà se yarn.lock il file non corrisponde package.jsonche individua gli stati di dipendenza incoerenti prima che raggiungano la produzione.

D'altro canto, npm rimane una scelta perfettamente valida per progetti di dimensioni ridotte o team profondamente coinvolti nell'ecosistema npm. Se gestisci solo pochi servizi con alberi di dipendenza modesti e non fai un uso intensivo di monorepo o PnP, la semplicità di utilizzare npm potrebbe essere più vantaggiosa rispetto alle funzionalità avanzate di Yarn.

Opzioni di installazione specifiche per il sistema operativo

Sebbene l'installazione della CLI globale tramite npm funzioni praticamente ovunque, Yarn offre anche distribuzioni e script specifici per i diversi sistemi operativi. Questi strumenti sono utili se si preferiscono i gestori di pacchetti nativi o se si opera su sistemi privi di una comoda configurazione npm.

Su macOS, una scelta molto diffusa è installare Yarn tramite Homebrew. Un flusso tipico, presupponendo che tu abbia già Node (eventualmente anche tramite Homebrew), è il seguente:

brew install yarn

Se utilizzi nvm o un altro gestore di versioni di Node, assicurati che la directory shims compaia prima di qualsiasi Homebrew Node nel tuo PATH. Altrimenti, potresti ritrovarti a utilizzare una versione di Node diversa da quella prevista durante l'esecuzione degli script Yarn.

Un'altra opzione su macOS è MacPorts, che permette di installare sia Node.js che Yarn, qualora non fossero già presenti. Per un controllo ancora maggiore, Yarn pubblica anche uno script di installazione che funziona su macOS e su sistemi Unix generici; eseguendo questo script nella shell, Yarn viene scaricato e configurato in un'unica operazione.

Su Windows, i percorsi consigliati sono il programma di installazione MSI, Chocolatey o Scoop. Il programma di installazione MSI ti guida attraverso una procedura guidata grafica e di solito si assicura che Node.js sia presente durante il processo. Scoop, d'altro canto, ti permette di installare Yarn dalla riga di comando, suggerendo facoltativamente Node se non è presente.

Quando si installa Yarn su Windows, è un'ottima idea inserire nella whitelist sia la cartella del progetto che la directory della cache di Yarn, in genere sotto %LocalAppData%\Yarn, nel tuo antivirus. Altrimenti, ogni singolo file scaricato e scritto potrebbe essere analizzato, rallentando drasticamente le installazioni.

Le distribuzioni Linux spesso offrono diverse opzioni: pacchetti di sistema ufficiali, repository proprietari di Yarn o installazioni manuali tramite file tarball. Su Debian e Ubuntu, ad esempio, è possibile aggiungere il repository APT di Yarn, configurare facoltativamente NodeSource per ottenere una versione recente di Node.js e quindi installare Yarn tramite apt.

Su distribuzioni come CentOS, Fedora, RHEL o Arch, Yarn offre archivi tar con firma GPG che è possibile scaricare ed estrarre in qualsiasi posizione sul disco. In quelle configurazioni manuali, in genere è necessario verificare la firma del tarball con GPG e quindi aggiungere la directory Yarn non compressa al tuo PATH in modo che yarn Il comando è disponibile a livello di sistema.

Configurazione del PATH su Unix, Linux e Windows

Una fonte comune di confusione durante l'installazione è la configurazione del PATH: Yarn potrebbe essere installato, ma la shell non riesce a trovare il file binario. In tal caso, è necessario aggiornare l'ambiente in modo che la directory Yarn venga inclusa nella variabile PATH.

Per le installazioni manuali di tarball su sistemi Unix-like, il modello usuale è quello di esportare un percorso che punta a Yarn's bin directory. Per esempio:

export PATH="$PATH:/opt/yarn-[version]/bin"

Inserisci questa riga nel tuo file di profilo della shell (come ad esempio .bashrc, .bash_profile, .zshrc(o simili), quindi apri una nuova sessione del terminale o esegui il comando `source` sul file affinché la modifica abbia effetto. Una volta fatto, yarn --version dovrebbe funzionare da qualsiasi directory.

Se ti appoggi yarn global Per i comandi, Yarn deve anche assicurarsi che la sua cartella bin globale sia presente nel PATH. Un modo rapido per farlo è estendere il tuo profilo con:

export PATH="$PATH:`yarn global bin`"

Gli utilizzatori di conchiglie di pesce invece si affidano a fish_user_paths e può eseguire:

set -U fish_user_paths (yarn global bin) $fish_user_paths

Su Windows, potrebbe essere necessario aggiungere manualmente anche la directory del file binario di Yarn alla variabile d'ambiente PATH. Un esempio semplice potrebbe essere:

set PATH=%PATH%;C:\.yarn\bin

In pratica, i programmi di installazione grafici o i gestori di pacchetti di Windows spesso gestiscono automaticamente la configurazione della variabile d'ambiente PATH, ma è utile sapere come modificarla manualmente quando qualcosa non funziona come previsto.

Problemi tipici di installazione e come risolverli

Anche con una documentazione chiara, alcuni problemi di installazione si ripresentano ripetutamente quando i team adottano Yarn. Fortunatamente, la maggior parte di essi ha soluzioni ben comprese e ripetibili.

Un problema ricorrente riguarda gli errori relativi ai permessi durante l'installazione della CLI globale tramite npm. Se il prefisso npm punta a una directory di proprietà del sistema, un comando come:

sudo npm install -g yarn

Potrebbe funzionare, ma non è la soluzione ideale a lungo termine. Un approccio migliore consiste nel configurare npm in modo che utilizzi una directory globale di proprietà dell'utente. Puoi verificare il prefisso corrente con:

npm config get prefix

Se indica qualcosa sotto /usr, crea la tua directory e riconfigura npm. Per esempio:

mkdir ~/.npm-global
npm config set prefix '~/.npm-global'
export PATH=~/.npm-global/bin:$PATH

Dopo aver ricaricato la configurazione della shell, dovresti essere in grado di installare Yarn a livello globale senza sudo, evitando molti grattacapi legati alle autorizzazioni.

Un'altra frequente fonte di confusione è rappresentata dalle discrepanze di versione tra la versione globale di Yarn e la versione di Yarn specificata per il progetto. Ricorda che questo è intenzionale: la CLI globale 1.x è solo un launcher e, quando viene utilizzata all'interno di un progetto configurato con Berry, delega a qualsiasi versione risieda in .yarn/releases.

Se, nonostante Yarn abbia segnalato un'installazione riuscita, alcuni pacchetti risultano mancanti, è possibile che lo strumento in questione non supporti ancora il protocollo PnP. Alcuni editor, linter o strumenti di compilazione presuppongono un node_modules directory e falliscono quando non esiste. Le soluzioni comuni includono l'abilitazione degli SDK di Yarn per gli editor, l'utilizzo di strumenti compatibili dalla matrice di supporto di Yarn o il passaggio temporaneo del linker a node-modules via .yarnrc.yml.

I conflitti nei file di blocco sono inevitabili nei team attivi in ​​cui più rami aggiungono o modificano le dipendenze in parallelo. Quando yarn.lock conflitti durante una fusione, una strategia efficace è scegliere un ramo come baseline, risolvere manualmente i conflitti testuali a favore di quella baseline ove possibile e quindi eseguire yarn install per rigenerare un file di blocco pulito che confermi nuovamente come nuova fonte di verità.

I problemi relativi alla cache vengono solitamente risolti con un semplice yarn cache clean seguito da un fresco yarn install. Se Yarn si comporta in modo anomalo, i pacchetti sembrano obsoleti o compaiono strani errori di risoluzione, spesso la pulizia della cache e la reinstallazione riportano il sistema a uno stato normale senza ulteriori indagini.

Controlli post-installazione e ottimizzazione continua delle prestazioni

Una volta installato Yarn e dopo aver verificato che i comandi siano in esecuzione correttamente, è consigliabile effettuare alcuni rapidi controlli di integrità per assicurarsi che tutto sia configurato correttamente per il progetto. Il primo e più semplice passaggio consiste nel confermare la versione:

yarn --version

Dopodiché, in qualsiasi progetto che abbia già un package.json, eseguendo yarn install L'assenza di errori è un forte indicatore della compatibilità tra il tuo ambiente, l'accesso al registro e la versione di Node. Se le dipendenze sono numerose, è consigliabile monitorare i tempi di installazione; nelle esecuzioni successive, la cache e la gestione della concorrenza di Yarn dovrebbero ridurre notevolmente tale tempo.

Yarn offre anche comandi come yarn outdated per vedere quali pacchetti hanno versioni più recenti disponibili e yarn list --depth=0 per stampare tutte le dipendenze di primo livello effettivamente installate. Questi strumenti ti aiutano a tenere traccia delle variazioni di dipendenza e a decidere quando programmare gli aggiornamenti.

In termini di prestazioni, ci sono diverse leve che è possibile azionare dopo l'installazione. Impostazioni come networkConcurrency, cartelle di cache personalizzate o la disabilitazione delle barre di avanzamento dettagliate nella CI possono far risparmiare secondi o addirittura minuti nelle installazioni di grandi dimensioni. Ad esempio, aumentando la concorrenza con:

yarn config set network-concurrency 8

Consente a Yarn di inviare più richieste di rete in parallelo, spesso velocizzando i download su connessioni veloci.

Infine, per monorepo molto grandi o configurazioni multi-ambiente, la combinazione di Yarn con infrastrutture scalabili (come pipeline CI basate su container o piattaforme di build cloud) consente di sfruttare appieno il suo design deterministico e ottimizzato per la cache. Poiché ogni installazione è guidata da yarn.lock e PnP o node_modules I metadati, le cache condivise tra i nodi CI o riutilizzate tra le build possono ridurre drasticamente i tempi di installazione.

In definitiva, dedicare del tempo a capire come installare Yarn correttamente, assegnarlo a ciascun progetto, regolare la variabile d'ambiente PATH e la configurazione, e sfruttare le sue funzionalità di caching e di gestione dello spazio di lavoro, ripaga rapidamente. Il risultato sono installazioni più rapide, build più prevedibili, una migliore ergonomia del monorepo e un flusso di lavoro di gestione delle dipendenze più facile da replicare tra colleghi, sistemi CI/CD e ambienti di produzione.

Related posts: