Quando utilizzare Yarn over NPM? Quali sono le differenze?


99

Quali sono le differenze tra Yarn e NPM? Al momento della stesura di questa domanda, posso trovare solo alcuni articoli su Internet che mostrano qual è l'equivalente Yarn di un comando NPM come questo .

Hanno le stesse funzionalità (so che Yarn esegue la memorizzazione nella cache locale e sembra che sia necessario scaricare un pacchetto solo una volta) ma a parte questo ci sono dei vantaggi per il passaggio da NPM a Yarn?


11
Questa non è una brutta domanda e non merita un voto negativo. Detto questo, ha bisogno di essere approfondito un po 'per renderlo una domanda davvero valida.
jedd.ahyoung

Un rapido Google salta fuori questo . Credo che questo sia probabilmente troppo ampio / non costruttivo per StackOverflow e potrebbe fare comunque un po 'più di ricerca.
Aurora0001

1
@ Aurora0001 quando ho cercato ho visto il cheatsheet ma non è la risposta alla mia domanda! Voglio conoscere le differenze tra i due e non le differenze tra i comandi. Si prega di leggere prima la mia domanda
Asha

4
@Asha Dovresti modificare la tua domanda per avere più dettagli e mostrare ciò che hai già ricercato. Che tipo di differenze stai cercando di trovare? Stai tentando di scoprire come vengono implementate le librerie? Stai tentando di scoprire come differiscono nell'affrontare il problema? Se rendi la tua domanda più precisa, può essere utile, a seconda di ciò che stai chiedendo. (A seconda di ciò che stai chiedendo, le informazioni potrebbero essere già disponibili su Google.)
jedd.ahyoung

3
le persone divertenti ti dicono di cercarlo su google; Ho trovato la tua domanda andando su Google ... le persone in StackOverflow come escludono eccessivamente le cose, come se le rendesse più importanti, immagino.
jairhumberto

Risposte:


67

AGGIORNAMENTO: marzo 2018 (un po 'in ritardo ...)

Dalla versione 5, npm

  • genera un 'file di blocco' chiamato package-lock.jsonche corregge l'intero albero delle dipendenze più o meno allo stesso modo del meccanismo di blocco del filo (o di qualsiasi altro),
  • È stato creato uno strumento
  • --save è ora implicito per npm i
  • Migliore utilizzo della rete e della cache

npm 5.7.0 ha inoltre introdotto il npm cicomando per installare le dipendenze più rapidamente in un ambiente di integrazione continua installando solo i pacchetti trovati in package-lock.json(riportando un errore se package-lock.jsone package.jsonnon sono sincronizzati).

Personalmente , lo uso ancora npm.


Originale

Mi dispiace citare direttamente dai documenti, ma fanno un ottimo lavoro nello spiegare perché, in modo abbastanza conciso da non vedere come riassumere ulteriormente le idee.

In gran parte:

  1. Sai sempre che stai ottenendo la stessa cosa su ogni macchina di sviluppo

  2. Paralellizza le operazioni che npmnon lo fanno, e

  3. Rende più efficiente l'uso della rete.

  4. Può anche fare un uso più efficiente di altre risorse di sistema (come la RAM) .

Quali sono le esperienze di produzione delle persone con esso? Chissà, è un neonato per il grande pubblico.

TL; DR da Yehuda Katz :

Fin dall'inizio, il file di blocco Yarn garantisce che l'esecuzione ripetuta di filato sullo stesso repository restituisca gli stessi pacchetti.

In secondo luogo, Yarn cerca di ottenere buone prestazioni, con una cache fredda, ma soprattutto con una cache calda.

Infine, Yarn fa della sicurezza un valore fondamentale.

Bel post sul blog

" NPM vs Yarn Cheat Sheet " di Gant Laborde

Versione leggermente più lunga del progetto :

Veloce: Yarn memorizza nella cache tutti i pacchetti che scarica, quindi non è più necessario. Inoltre, parallelizza le operazioni per massimizzare l'utilizzo delle risorse in modo che i tempi di installazione siano più rapidi che mai.

Affidabile: utilizzando un formato file di blocco dettagliato ma conciso e un algoritmo deterministico per le installazioni, Yarn è in grado di garantire che un'installazione che ha funzionato su un sistema funzionerà esattamente allo stesso modo su qualsiasi altro sistema.

Sicuro: Yarn utilizza i checksum per verificare l'integrità di ogni pacchetto installato prima che il suo codice venga eseguito.

E dal README.md :

  • Modalità offline: se hai già installato un pacchetto in precedenza, puoi installarlo di nuovo senza alcuna connessione Internet.
  • Deterministico: le stesse dipendenze verranno installate esattamente nello stesso modo su ogni macchina, indipendentemente dall'ordine di installazione.
  • Prestazioni di rete: Yarn accoda in modo efficiente le richieste ed evita cascate di richieste al fine di massimizzare l'utilizzo della rete.
  • Registri multipli: installa qualsiasi pacchetto da npm o Bower e mantieni lo stesso flusso di lavoro del pacchetto.
  • Resilienza della rete: una singola richiesta non riuscita non farà fallire un'installazione. Le richieste vengono ritentate in caso di errore.
  • Modalità flat: risolvi le versioni non corrispondenti delle dipendenze in una singola versione per evitare di creare duplicati.
  • Più emoji. 🐈

Puoi dirmi se il filato fa la risoluzione delle dipendenze come fa npm v3 ? Capisco che esiste --flatun'opzione che forza una struttura piatta reale in cui è consentita l'installazione di una sola versione di ciascuna dipendenza, ma qual è il comportamento predefinito su questo? Grazie.
Dimitris Karagiannis

2
Altre emoji: gatto:
Huei Tan

7
Ottima risposta. Mi chiedo se abbiano provato a contribuire a npm prima di eseguire il fork, rinominare e modificare la sintassi di install -g.
Gardner Bickford


2

npm :

  1. Il gestore di pacchetti per JavaScript. npm è l'interfaccia della riga di comando per l'ecosistema npm. È testato in battaglia, sorprendentemente flessibile e utilizzato da centinaia di migliaia di sviluppatori JavaScript ogni giorno.
  2. NPM genera un file di blocco corretto mentre un file di blocco del filato potrebbe essere danneggiato in alcuni casi e deve essere risolto con strumenti per filati

Filato :

  1. Un nuovo gestore di pacchetti per JavaScript. Yarn memorizza nella cache ogni pacchetto scaricato, quindi non è più necessario che lo ripeta. Inoltre, parallelizza le operazioni per massimizzare l'utilizzo delle risorse in modo che i tempi di installazione siano più rapidi che mai.
  2. Yarn non supporta l'accesso con una password (mentre NPM lo fa)

1
che tipo di login?
Rich Stone,

2

Cos'è il PNPM?

pnpmusa collegamenti fisici e collegamenti simbolici per salvare una versione di un modulo solo una volta su un disco. Quando si utilizza npm o Yarn, ad esempio, se si hanno 100 progetti che utilizzano la stessa versione di lodash, si avranno 100 copie di lodash su disco. Con pnpm, lodash verrà salvato in un unico posto sul disco e un collegamento fisico lo inserirà nel node_modules dove dovrebbe essere installato.

Di conseguenza, risparmi gigabyte di spazio sul disco e hai installazioni molto più veloci! Se desideri maggiori dettagli sulla struttura unica node_modules creata da pnpm e perché funziona bene con l'ecosistema Node.js, leggi questo piccolo articolo: Perché dovremmo usare pnpm?

Come installare PNPM?

npm install -g pnpm

Come installare il pacchetto npm utilizzando PNPM?

pnpm install -g typescript // or your desired package

Vantaggi di PNPMover YarneNPM

Ecco la barra di avanzamento che mostra il tempo di installazione impiegato da NPM, YARNe PNPM(la barra più corta è migliore) inserisci qui la descrizione dell'immagine

Fare clic per il controllo completo del benchmark

per maggiori dettagli, visita https://www.npmjs.com/package/pnpm


1

Quando installi un pacchetto usando Yarn (usando il filato aggiungi nomepacchetto), posiziona il pacchetto sul tuo disco . Durante la prossima installazione, questo pacchetto verrà utilizzato invece di inviare una richiesta HTTP per ottenere il tarball dal registro.

Yarn viene fornito con un pratico controllo delle licenze , che può diventare davvero potente nel caso in cui devi controllare le licenze di tutti i moduli da cui dipendi.

Se stai lavorando su software proprietario, non ha molta importanza quale usi. Con npm, puoi usare npm-shrinkwrap.js, mentre puoi usare yarn.lock con Yarn.

Per ulteriori informazioni leggere il seguente blog

https://blog.risingstack.com/yarn-vs-npm-node-js-package-managers/


1

Cercando di dare una panoramica migliore per i principianti.

npm è stato storicamente (2010) il gestore di pacchetti più popolare per JavaScript. Se vuoi usarlo per gestire le dipendenze del tuo progetto, puoi digitare il seguente comando:

npm init

Questo genererà un package.jsonfile. Contiene tutte le dipendenze del progetto.

Poi

npm install

creerebbe una directory node_modulese scaricherà le dipendenze (che hai aggiunto al package.jsonfile) al suo interno.

Creerà anche un package-lock.jsonfile. Questo file viene utilizzato per descrivere l'albero delle dipendenze che è stato generato. Permette agli sviluppatori di installare esattamente le stesse dipendenze. Ad esempio, potresti immaginare uno sviluppatore che aggiorna una dipendenza a v2 e poi v3 mentre un altro aggiorna direttamente a v3.

npm installa le dipendenze in modo non deterministico, il che significa che i due sviluppatori potrebbero avere una node_modulesdirectory diversa con conseguenti comportamenti diversi . ** npm ha sofferto di una cattiva reputazione come ad esempio nel febbraio 2018: è stato scoperto un problema nella versione 5.7.0 in cui l'esecuzione di sudo npm su sistemi Linux cambiava la proprietà dei file di sistema, interrompendo definitivamente il sistema operativo.

Per risolvere questi problemi e altri, Facebook ha introdotto un nuovo gestore di pacchetti (2016): filati un gestore di pacchetti più veloce, più sicuro e più affidabile per JavaScript.

Puoi aggiungere Yarn a un progetto digitando:

yarn init

Questo creerà un package.jsonfile. Quindi, installa le dipendenze con:

yarn install

node_modulesVerrà generata una cartella . Yarn genererà anche un file chiamato yarn.lock. Questo file ha lo stesso scopo del package-lock.jsonma è invece costruito utilizzando un algoritmo deterministico e affidabile, portando così a build coerenti.

Se hai avviato un progetto con npm , puoi effettivamente migrare facilmente a Yarn . il filato consumerà lo stesso package.json. Vedere Migrazione da npm per maggiori dettagli.

Tuttavia, npm è stato migliorato con ogni nuova versione e alcuni progetti utilizzano ancora npm su filato .


1

La risposta di @msanford copre quasi tutto, tuttavia, mi manca la parte relativa alla sicurezza (Vulnerabilità note di OWASP).

Filato

Puoi controllarli usando yarn audit, tuttavia, non puoi aggiustarli. Questo è ancora un problema aperto su GitHub ( https://github.com/yarnpkg/yarn/issues/7075 ).

npm

Puoi usarli npm audit fix, quindi alcuni puoi aggiustarli da solo.

Entrambi, cioè npm audite yarn audithanno i propri strumenti di integrazione continua. Questi sono rispettivamente https://github.com/IBM/audit-ci (usato, funziona alla grande!) E https://yarnpkg.com/package/audit-ci (non usato).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.