Nello sviluppo di applicazioni moderne, non scriviamo tutto da zero. Preferiamo invece utilizzare pacchetti open source esistenti. Ognuno di questi pacchetti ha i propri manutentori e comunità. Quindi, l’utilizzo di un pacchetto nei nostri progetti ci offre alcuni vantaggi come lo sviluppo più rapido, l’accesso a nuovi aggiornamenti regolari e una maggiore sicurezza rispetto allo script creato su misura.
È comune che un pacchetto dipenda da molti altri pacchetti per funzionare correttamente. Allo stesso lodash, anche gli altri pacchetti possono dipendere da qualcosa come lodash, ma lodash stesso dipende anche da diversi pacchetti. In altre parole, le dipendenze annidate a volte possono diventare così complesse da non essere in grado di gestire manualmente la gestione delle dipendenze.
Ecco quando un gestore di pacchetti è estremamente utile. I gestori di pacchetti sono strumenti che gestiscono automaticamente le dipendenze di un progetto.
Ad esempio, un gestore di pacchetti può installare pacchetti nuovi o aggiornare quelli esistenti con un singolo comando. Perché tutto è automatizzato, quindi non c’è possibilità di errore umano. Come sviluppatori JavaScript, abbiamo accesso a diversi gestori di pacchetti. Ma, in questa guida, confronteremo i tre più popolari:
- npm
- Yarn
- pnpm
- Panoramica dei gestori di pacchetti
- Caratteristiche di npm, Yarn e pnpm
- Vantaggi di npm:
- i Vantaggi di Filo:
- Vantaggi di pnpm:
- gestione Pacchetti confronto
- Facilità d’uso
- Velocità
- Sicurezza
- Stabilità
- Supporto per monorepos
- Deterministico — il file di blocco
- Conclusione
- LogRocket: Debug JavaScript errori più facile da capire il contesto
Panoramica dei gestori di pacchetti
npm è stato il primo gestore di pacchetti a introdurre i concetti di registry protocol e standard di imballaggio. È stato rilasciato nel 2010 e ufficialmente adottato dal Nodo.js team poco dopo, che è stato il punto di svolta per npm.
Dopo l’enorme successo del nodo.js, npm ha anche ricevuto la trazione dalla comunità degli sviluppatori. Offre un registro online per i pacchetti JavaScript e uno strumento da riga di comando che funziona con il registro per installare e aggiornare le dipendenze.
Ma ci sono alcuni inconvenienti di npm che hanno innescato lo sviluppo di Yarn e pnpm. Ad esempio, npm è significativamente più lento rispetto alle sue controparti. Ha anche una storia di gravi vulnerabilità di sicurezza.
Così, grandi aziende tecnologiche come Facebook e Google erano riluttanti a continuare a utilizzare npm. A loro volta, hanno unito gli sforzi per sviluppare una versione migliore di npm e chiamarlo filato. Nel frattempo, lo sviluppatore ucraino Zoltan Kochan ha sviluppato pnpm.
Caratteristiche di npm, Yarn e pnpm
Tutti questi gestori di pacchetti sono open-source, il che significa che hai pieno accesso per controllare il funzionamento interno di ciascuno di essi. A volte questo è anche un requisito nello sviluppo di applicazioni a livello aziendale.
Vantaggi di npm:
- Genera automaticamente un file
package-lock.json
. È utile impegnarsi in un sistema di controllo della versione. In questo modo, gli sviluppatori possono facilmente installare le dipendenze che le macchine - Gestione locale o globale dipendenze con facilità
- npm è in grado di gestire più versioni delle dipendenze
- è un registro ufficiale che ha più pacchetti di pypi, rubygems, o packagist
i Vantaggi di Filo:
- Filati consente di risolvere molti problemi che in un Monorepo. Ad esempio, se si mantengono più pacchetti sotto lo stesso repository e tutti hanno un file
package.json
separato, è possibile aggiornare facilmente tutti i pacchetti con Yarn, grazie al suo concetto di workspace che può installare le dipendenze di tutti i pacchetti in un repository, tutto in una volta. Con npm, è necessario eseguire manualmente il comandonpm install
all’interno di ogni cartella del pacchetto. - Yarn fa uso di un meccanismo di cache offline, il che significa che quando si installa un pacchetto per la prima volta, Yarn lo aggiunge a una cartella cache sotto
~/.yarn-cache
. Quindi, la prossima volta che hai bisogno di questo pacchetto, Yarn lo recupererà dalla cache locale invece di fare una richiesta HTTP al server. Questo piccolo miglioramento aumenta significativamente le prestazioni di Yarn rispetto a npm - Yarn fa anche uso di un file di blocco chiamato
yarn.lock
, quindi i tuoi progetti funzioneranno correttamente per tutti i compagni di squadra. Questo concetto è anche indicato come un algoritmo di installazione deterministica - È dotato di un correttore di licenze integrato che può essere utile in diversi scenari quando si sviluppano applicazioni
- A differenza di npm, Yarn utilizza un approccio chiamato download paralleli. Consente a Yarn di utilizzare più risorse per accelerare il processo di compilazione
- Può riprovare automaticamente la richiesta HTTP in caso di errore. Questa funzione è particolarmente utile quando si verificano problemi temporanei di Internet
Vantaggi di pnpm:
- È compatibile con npm ma offre anche un utilizzo e una velocità significativamente migliori dello spazio su disco
- pnpm installa tutti i pacchetti in un’unica posizione e quindi utilizza i collegamenti simbolici per fare riferimento a loro. Introduce un concetto completamente nuovo chiamato sistema di archiviazione indirizzabile al contenuto che consente a pnpm di rilevare la differenza tra i file. A sua volta, non duplica i file invariati in due diverse versioni di un pacchetto
- La sua ultima versione, 5.8.0, introduce un nuovo Filo-bash-come impostazione denominata shell-emulatore, un cross-piattaforma ambiente di shell
- pnpm ha un rigoroso meccanismo di controllo di accesso, il che significa che un pacchetto può accedere solo le dipendenze, che sono definiti nel
package.json
file
gestione Pacchetti confronto
Facilità d’uso
npm, Filati, e pnpm un’offerta di quasi identici comandi per le varie operazioni, e sono tutti di facile utilizzo. Ecco un esempio dei loro comandi comunemente usati:
npm | Filo | pnpm |
---|---|---|
npm install | filati di installazione | pnpm installare |
npm aggiornamento | filati upgrade | pnpm aggiornamento |
Velocità
Non c’è alcuna corrispondenza per pnpm quando si tratta di velocità e le prestazioni di questi gestori di pacchetti. Secondo un benchmark di diversi casi d’uso, pnpm ha mostrato prestazioni fino a 3 volte più veloci di npm.
Le velocità di filato e npm sono comparabili. In alcuni casi, il filato ha un vantaggio significativo rispetto a npm, ma ci sono scenari in cui npm è una scelta più adatta. Ad esempio, se eseguiamo un’operazione di installazione semplicemente utilizzando la funzionalità node_modules
e skip cache
e lock file
, npm potrebbe offrire una velocità 5 volte migliore. Allo stesso modo, se usiamo tutte e tre le funzionalità, il filato potrebbe aumentare le sue prestazioni e diventa 11 volte più veloce di npm.
Sicurezza
Il principale vantaggio di Yarn rispetto a npm è che verifica l’integrità di ogni pacchetto utilizzando checksum. Il processo di verifica viene eseguito prima di eseguire qualsiasi codice dal pacchetto, quindi elimina qualsiasi possibilità di vulnerabilità del dirottamento del pacchetto.
D’altra parte, npm è un po ‘ più indulgente quando si tratta di lavorare con pacchetti difettosi. Si sta ancora evolvendo al fine di offrire le migliori pratiche per la sicurezza. Ma, npm ha generalmente una cattiva reputazione in termini di sicurezza.
In passato, c’erano alcune vulnerabilità di sicurezza in npm che colpivano direttamente molti progetti. Ad esempio, nella versione npm 5.7.0, quando si esegue sudo npm
comando su un sistema operativo basato su Linux (OS), c’era la possibilità di modificare la proprietà dei file di sistema, rendendo il sistema operativo inutilizzabile.
Allo stesso modo, un altro incidente di furto di bitcoin è accaduto nel 2018. Fondamentalmente, il Nodo popolare.il pacchetto js EventStream ha aggiunto una dipendenza dannosa flatmap-stream
nella sua versione 3.3.6. Questo pacchetto dannoso è stato imballato con un payload crittografato che cerca di rubare bitcoin dalla macchina dello sviluppatore.
pnpm combina gli attributi positivi di npm e Yarn per fornire una sicurezza ancora migliore. Implementa anche un rigoroso meccanismo di controllo degli accessi che lega un pacchetto a utilizzare solo le proprie dipendenze definite nel suo filepackage.json
.
Stabilità
npm, Yarn e pnpm hanno attraversato diverse fasi negli ultimi anni. Nel corso del tempo, la loro base di codice è maturata perché hanno ricevuto tonnellate di contributi dalla comunità open-source.
E, con il passare del tempo, appaiono nuovi concetti e idee che potrebbero introdurre cambiamenti di rottura. Al momento di scrivere questa guida, tutti questi gestori di pacchetti sono in buona forma e puoi usarli nei tuoi progetti senza problemi.
Yarn è supportato da Facebook e Google, npm è supportato da Microsoft e Node.js, e pnpm è per lo più sviluppato da un individuo, anche se ora ha 75+ collaboratori — in modo da poter dipendere da questi gestori di pacchetti per creare il vostro prossimo progetto.
Supporto per monorepos
I monorepos sono principalmente preferiti dalle grandi aziende tecnologiche per archiviare e gestire le loro enormi basi di codice. npm è stato progettato solo per gestire singoli progetti. A partire da ora, non ha alcuna funzionalità per supportare monorepos. Ma sia Yarn che pnpm hanno un supporto completo per monorepos, grazie al loro concetto di workspace.
Deterministico — il file di blocco
Tutti e tre i gestori di pacchetti sono imballati con la funzionalità del file di blocco. Esso consente a diversi sviluppatori di installare la stessa copia esatta del progetto. npm utilizza un filepackage-lock.json
, Yarn utilizzayarn.lock
e pnpm utilizzapnpm-lock.yaml
.
Conclusione
Se stai cercando una soluzione che ti dia una migliore velocità e un utilizzo efficiente della memoria, dovresti considerare fortemente l’uso di pnpm.
Se si sta gestendo monorepos, è possibile utilizzare pnpm o Yarn per farlo. Tuttavia, tieni presente che Yarn invia i dati di utilizzo a Facebook, il che potrebbe non rendere Yarn una scelta adatta in alcuni scenari.
Yarn inoltre non supporta la versione 5 del Nodo.js. A questo proposito, npm è un’opzione preferita per il nodo.progetti basati su js perché è raccomandato dal Nodo.squadra js. In questi giorni, Nodo.js viene fornito con npm per impostazione predefinita.
Con npm, dovresti considerare la sua storia con problemi di sicurezza, che hanno innescato lo sviluppo di Yarn, che è stato anche creato per risolvere molti emittenti presenti in npm. Quindi, se sei interessato alla sicurezza dei tuoi progetti, considera l’utilizzo di Yarn invece di npm.
LogRocket: Debug JavaScript errori più facile da capire il contesto
Codice di debug è sempre un compito noioso. Ma più capisci i tuoi errori, più facile è risolverli.
LogRocket consente di comprendere questi errori in modi nuovi e unici. La nostra soluzione di monitoraggio frontend tiene traccia del coinvolgimento degli utenti con i frontend JavaScript per darti la possibilità di scoprire esattamente cosa ha fatto l’utente che ha portato a un errore.
LogRocket registra i log della console, i tempi di caricamento della pagina, gli stacktraces, le richieste / risposte di rete lente con intestazioni + corpi, metadati del browser e log personalizzati. Comprendere l’impatto del tuo codice JavaScript non sarà mai più facile!
Provalo gratuitamente.