Yarn è un client npm open source che è stato sviluppato su Facebook e migliora molti aspetti del client standard di npm. In questo tutorial, mi concentrerò sulle sei funzioni principali che rendono Yarn fantastico:
Uno dei claim di Yarn alla fama è la sua velocità rispetto al client standard di npm. Ma quanto è veloce? In un recente benchmark, Yarn era da due a tre volte più veloce di npm. Il punto di riferimento ha programmato l'installazione di React, Angular 2 e Ember. Questo è un test abbastanza buono per un gestore di pacchetti dato che ognuno di questi framework tira fuori un mucchio di dipendenze e rappresenta una parte importante delle dipendenze di un'applicazione web reale.
Aggiungiamo un altro punto dati e controlliamoci installando un'applicazione create-react usando sia il filato che il npm. Ecco l'installazione utilizzando il filato:
$ filato globale aggiungi crea-react-app --prefix / usr / local yarn globale v0.27.5 warning package.json: Nessun avviso di campo di licenza Nessun campo di licenza [1/4] Risoluzione di pacchetti ... [2/4] Recupero di pacchetti ... [ 3/4] Collegando le dipendenze ... [4/4] Crea nuovi pacchetti ... successo Installato "[email protected]" con i binari: - avviso create-react-app Nessun campo licenza Fatto in 2.59s.
Ecco l'installazione usando npm:
$ npm install -g create-react-app / usr / local / bin / create-react-app -> /usr/local/lib/node_modules/create-react-app/index.js + [email protected] .0 ha aggiunto 80 pacchetti in 9.422 secondi
Sì. Questo corrobora definitivamente altri rapporti su un significativo vantaggio di velocità per il filato. Filato installato in 2,59 secondi, mentre npm ha impiegato 9.422 secondi. Il filato era 3,63 volte più veloce!
Yarn vanta anche installazioni più robuste di npm. Cosa rende un'installazione instabile? Se le installazioni successive falliscono o producono un risultato diverso, l'installazione è instabile. Ci sono due cause principali:
Il filato risponde a entrambe le preoccupazioni.
Il filato utilizza una cache offline globale per archiviare i pacchetti installati una sola volta, quindi le nuove installazioni utilizzano la versione memorizzata nella cache ed evitano problemi di rete dovuti a intermittenti errori di rete. Puoi trovare dove si trova la cache del filato digitando:
$ fil cache cache /Users/gigi.sayfan/Library/Caches/Yarn/v1
Ecco i primi cinque pacchetti nella mia cache offline:
$ ls 'filato cache dir' | testa -5 npm- @ kadira npm- @ types npm-Base64-0.2.1-ba3a4230708e186705065e66babdd4c35cf60028 npm-JSONStream-0.8.4-91657dfe6ff857483066132b4618b62e8f4887bd npm-abab-1.0.3-b81de5f7274ec4e756d797cd834f303642724e5d
Il filo può andare anche oltre e avere un mirror offline completo che funzionerà attraverso gli aggiornamenti del filato stesso.
Il file yarn.lock viene aggiornato ogni volta che aggiungi o aggiorni una versione. In pratica mette in rilievo la versione esatta di ogni pacchetto che può essere specificato in package.json usando il versioning parziale (ad esempio solo maggiore e minore) e le sue dipendenze.
Ecco l'inizio di un tipico file yarn.lock. È possibile visualizzare la versione specificata in package.json come "abbrev @ 1" e la versione bloccata "1.1.0".
cat yarn.lock | head -18 # QUESTO E 'UN FILE AUTOGENERATO. NON MODIFICARE QUESTO FILE DIRETTAMENTE. # yarn lockfile v1 abab@^1.0.3: versione "1.0.3" risolta "https://registry.yarnpkg.com/abab/- /abab-1.0.3.tgz#b81de5f7274ec4e756d797cd834f303642724e5d" abbrev @ 1: versione "1.1 .0 "risolto" https://registry.yarnpkg.com/abbrev/- /abbrev-1.1.0.tgz#d0554c2256636e2f56e7c2e5ad183f859428d81f "accetta@~1.3.3: versione" 1.3.4 "risolto" https: // registro. yarnpkg.com/accepts/ - / accept-1.3.4.tgz # 86246758c7dd6d21a6474ff084a4740ec05eb21f "dipendenze: mime-types" ~ 2.1.16 "negoziatore" 0.6.1 "
Anche il filato ti dà il filato perché
comando per spiegare perché un particolare pacchetto è installato nel tuo progetto:
$ filato perché filato operaio-azienda perché v0.27.5 [1/4] Perché abbiamo il modulo "lavoratore-fattoria" ...? [2/4] Inizializzazione del grafico delle dipendenze ... [3/4] Ricerca della dipendenza ... [4/4] Calcolo delle dimensioni dei file ... informazioni Questo modulo esiste perché "reagisce-script # jest # jest-cli" dipende da questo. informazioni Dimensione del disco senza dipendenze: "132kB" informazioni Dimensione del disco con dipendenze univoche: "212kB" informazioni Dimensione del disco con dipendenze transitive: informazioni "244kB" Numero di dipendenze condivise: 2 Fatto in 1.38s.
Alcuni progetti devono rispettare determinati requisiti di licenza o semplicemente produrre un report per scopi interni o esterni. Filato rende davvero facile con il licenze di filati ls
comando. Produce un rapporto compatto che include il nome del pacchetto completo, il suo URL e la licenza. Ecco un esempio:
$ filato licenze ls | head -20 yarn licenses v0.27.5 ├─ [email protected] │ ├─ Licenza: ISC │ └─ URL: git + https: //github.com/jsdom/abab.git ├─ [email protected] │ ├ ─ Licenza: ISC │ └─ URL: http://github.com/isaacs/abbrev-js ├─ [email protected] │ ├─ Licenza: MIT │ └─ URL: https://github.com/jshttp/ accept.git ├─ [email protected] │ ├─ Licenza: MIT │ └─ URL: https://github.com/kesne/acorn-dynamic-import ├─ [email protected] │ ├─ Licenza: MIT │ └─ URL: https://github.com/ForbesLindesay/acorn-globals.git ├─ [email protected] │ ├─ Licenza: MIT │ └─ URL: https: // github .com / RReverser / ghianda-JSX
Il filato può anche generare un disclaimer per te con licenze di filato generano-disclaimer
. Il risultato è un testo con un messaggio di dichiarazione di non responsabilità e testo per ogni pacchetto nell'applicazione. Ecco un esempio del disclaimer generato per il mio progetto di test:
----- Il seguente software può essere incluso in questo prodotto: utils-merge. Una copia del codice sorgente può essere scaricata da git: //github.com/jaredhanson/utils-merge.git. Questo software contiene la seguente licenza e la seguente informativa: (Licenza MIT) Copyright (c) 2013 Jared Hanson È concessa l'autorizzazione, a titolo gratuito, a chiunque ottenga una copia di questo software e dei relativi file di documentazione (il "Software") , per trattare il Software senza limitazioni, inclusi senza limitazione i diritti di utilizzare, copiare, modificare, unire, pubblicare, distribuire, sublicenziare e / o vendere copie del Software e per consentire alle persone a cui è fornito il Software di fare pertanto, fatte salve le seguenti condizioni: la suddetta nota sul copyright e questa nota di autorizzazione devono essere incluse in tutte le copie o parti sostanziali del Software. IL SOFTWARE VIENE FORNITO "COSÌ COM'È", SENZA GARANZIE DI ALCUN TIPO, ESPRESSE O IMPLICITE, INCLUSE, A TITOLO ESEMPLIFICATIVO, LE GARANZIE DI COMMERCIABILITÀ, IDONEITÀ PER UN PARTICOLARE SCOPO E NON VIOLAZIONE. IN NESSUN CASO GLI AUTORI OI DETENTORI DEL COPYRIGHT SARANNO RITENUTI RESPONSABILI PER QUALSIASI RECLAMO, DANNO O ALTRO RESPONSABILITÀ, SIA IN UN ATTO DI CONTRATTO, TORT O ALTRO, DERIVANTE DA, FUORI O IN RELAZIONE AL SOFTWARE O ALL'UTILIZZO O ALTRI CONTRATTI NELL'AMBITO DEL SOFTWARE. ----- Il seguente software può essere incluso in questo prodotto: uuid. Una copia del codice sorgente può essere scaricata da https://github.com/defunctzombie/node-uuid.git. Questo software contiene la seguente licenza e le seguenti informazioni: Copyright (c) 2010-2012 Licenza Robert Mee Kieffer - http://opensource.org/licenses/mit-license.php -----
Yarn è completamente compatibile con npm in quanto è un client diverso che funziona con i registri di npm. Molto presto ha supportato Bower, ma poco dopo è stata presa la decisione di abbandonare il supporto di Bower.
La ragione principale era che il supporto di Bower non funzionava molto bene e svuotava la directory bower_components o non recuperava alcun pacchetto bower su un nuovo progetto. Ma un'altra ragione è che il team di Yarn non voleva incoraggiare la frammentazione nell'arena di gestione dei pacchetti e preferiva invece che tutti passassero a npm.
Se hai investito in Bower e non vuoi eseguire la migrazione in questo momento, puoi comunque utilizzare Yarn, ma aggiungi il seguente snippet al tuo file package.json:
"script": "postinstall": "bower install"
Il filato può funzionare con più tipi di registro. Per impostazione predefinita, se si aggiunge solo un pacchetto, verrà utilizzato il suo registro di npm (che è non il registro standard di NPM). Ma può anche aggiungere pacchetti da file, tarball remoti o repository git remoti.
Per vedere il registro di NPM configurato attuale:
$ config di filati ottiene il registro https://registry.yarnpkg.com
Per impostare un tipo di registro diverso: registro di configurazione del filato
Per aggiungere pacchetti da posizioni diverse, utilizzare i seguenti comandi add:
# Configurato il filato di registro npm aggiunto# File di filato pacchetto locale: / # Filato tarball remoto aggiungere https: // .tgz # Remote git repo filato aggiungere
Ad alcune persone piacciono gli emoji e altre no. Originariamente Yarn mostrò gli emoji automaticamente, ma solo su Mac OS X. Prese fuoco da entrambi i campi: gli emoji odiarono che la loro console su Mac OS X era ingombra di emoji, e gli amanti delle emoji erano sconvolti dal fatto che non avevano emoji su Windows e Linux.
Ora, gli emoji non vengono visualizzati su macOS per impostazione predefinita e puoi abilitare gli emoji con --emoji
bandiera:
$ yarn install --moji yarn install v0.27.5 [1/4] 🔍 Risoluzione dei pacchetti ... [2/4] 🚚 Recupero dei pacchetti ... [3/4] 🔗 Collegamento delle dipendenze ...
Yarn è il miglior gestore di pacchetti JavaScript. È compatibile con npm, ma molto, molto più veloce. Affronta problemi seri per progetti su larga scala con installazione instabile, supporta diversi tipi di registri e ha emoji per l'avvio.
JavaScript, anche se non privo di curve di apprendimento, ha un sacco di librerie e framework per tenerti occupato, come puoi vedere. Se stai cercando ulteriori risorse da studiare o da utilizzare nel tuo lavoro, dai un'occhiata a ciò che abbiamo a disposizione nel mercato Envato.
La community JavaScript è nel complesso molto positiva, e dietro a Yarn c'è molto slancio. Ha già affrontato alcuni problemi come il supporto Bower ridondante e le emoji per impostazione predefinita. La migrazione a Yarn da npm è molto semplice. Consiglio vivamente di provare.