Ogni pacchetto che viene installato può dipendere da altri pacchetti.
Si rischia che alla fine di un grosso progetto ci si ritrovi con centinaia o migliaia di pacchetti nell’albero delle dipendenze.
Per ovviare agli attuali problemi di npm, Facebook e Google hanno deciso di collaborare per creare un nuovo package manager.
La sua peculiarità è proprio la capacità di catalogare e installare le dipendenze secondo uno schema di versioning semantico (SEMVER) il quale permette di definire uno schema di controllo delle versioni che riflette i tipi di modifiche in ogni nuova versione (es. se una modifica rompe una API, aggiunge una feature o corregge un bug).
P.S. La leggenda narra che il nome "YARN" derivi dall'onomatopea dell'urlo che ha cacciato lo sviluppatore di Facebook dopo l'ennesimo problema derivato dai problemi dalle sottodipendenze dei moduli npm.
Lo scopo di Yarn non è quello di sostituire Npm, bensì di migliorarlo.
npm install -g yarn
"NPM INSTALL YARN" = getting your ex-girlfriend to move your new girlfriend's stuff into your house.
yarn init
yarn install
Come detto prima, dato che Yarn veste la maschera di "ottimizzatore", si affida principalmente allo stesso package.json di Npm
Yarn inizia a risolvere le dipendenze facendo richieste ai registri e cercando ogni dipendenza ricorsivamente.
Yarn controlla nella cache globale se un pacchetto è stato già installato, in caso di esito negativo scarica il pacchetto e lo salva nella cache.
Yarn copia tutti i file di cui ha bisogno dalla cache globale dentro la cartella “node_modules”.