Managerii de pachete JavaScript au comparat: Fire, NPM sau pnpm?

în dezvoltarea aplicațiilor moderne, nu scriem totul de la zero. În schimb, preferăm să folosim pachetele open-source existente. Fiecare dintre aceste pachete are propriile sale întreținători și comunitate. Deci, utilizarea unui pachet în proiectele noastre ne oferă câteva avantaje, cum ar fi dezvoltarea mai rapidă, accesul la actualizări noi, regulate și o securitate mai bună decât scriptul creat personalizat.

este obișnuit ca un pachet să depindă de multe alte pachete pentru a funcționa corect. Lodash lodash în sine depinde de mai multe pachete, de asemenea, poate depinde de ceva de genul lodash, dar lodash în sine depinde de mai multe pachete, de asemenea. Cu alte cuvinte, dependențele imbricate pot deveni uneori atât de complexe încât nu pot gestiona manual gestionarea dependenței.

iată când un manager de pachete este extrem de util. Managerii de pachete sunt instrumente care gestionează automat dependențele unui proiect.

de exemplu, un manager de pachete poate instala pachete noi sau actualiza pachete existente cu o singură comandă. Pentru că totul este automatizat, deci nu există nicio șansă de eroare umană. În calitate de dezvoltatori JavaScript, avem acces la mai mulți manageri de pachete. Dar, în acest ghid, vom compara cele trei cele mai populare:

  • NPM
  • Fire
  • pnpm

Prezentare generală a managerilor de pachete

npm a fost primul manager de pachete care a introdus conceptele de protocol de registru și standarde de ambalare. A fost lansat în 2010 și adoptat oficial de nod.echipa js la scurt timp după aceea, care a fost punctul de cotitură pentru npm.

după succesul masiv al nodului.js, npm a primit, de asemenea, tracțiune Din partea comunității dezvoltatorului. Oferă un registru online pentru pachetele JavaScript, precum și un instrument de linie de comandă care funcționează cu registrul pentru a instala și actualiza dependențele.

dar există puține dezavantaje ale npm care au declanșat dezvoltarea firelor și pnpm. De exemplu, npm este semnificativ mai lent decât omologii săi. De asemenea, are o istorie de vulnerabilități grave de securitate.deci, companii mari de tehnologie precum Facebook și Google au ezitat să continue să folosească npm. La rândul lor, și-au unit eforturile pentru a dezvolta o versiune mai bună a npm și a o numi Fire. Între timp, dezvoltatorul ucrainean Zoltan Kochan a dezvoltat pnpm.

caracteristicile npm, fire și pnpm

toți acești manageri de pachete sunt open-source, ceea ce înseamnă că aveți acces complet pentru a verifica funcționarea interioară a fiecăruia. Uneori, aceasta este chiar o cerință în dezvoltarea aplicațiilor la nivel de întreprindere.

beneficiile npm:

  1. generează automat un fișierpackage-lock.json. Este util să se angajeze la un sistem de control al versiunii. În acest fel, alți dezvoltatori pot instala cu ușurință dependențele pe mașinile lor locale
  2. gestionați cu ușurință dependențele locale sau globale
  3. NPM este bine echipat pentru a gestiona mai multe versiuni de dependențe
  4. are un registru oficial care are mai multe pachete decât pypi, rubygems sau packagist

beneficiile firelor:

  1. Fire rezolvă multe probleme care apar într-un Monorepo. De exemplu, dacă mențineți mai multe pachete sub același depozit și toate au un fișier package.json separat, puteți actualiza cu ușurință toate pachetele cu fire, datorită conceptului său de spații de lucru care pot instala dependențe ale tuturor pachetelor într-un depozit, toate dintr-o singură dată. Cu npm, va trebui să rulați manual comanda npm install în fiecare folder de pachete.
  2. Fire folosește un mecanism cache offline, ceea ce înseamnă că atunci când instalați un pachet pentru prima dată, Fire îl adaugă într-un folder cache sub~/.yarn-cache. Deci, data viitoare când aveți nevoie de acest pachet, Fire îl va prelua din memoria cache locală în loc să facă o solicitare HTTP către server. Acest accesoriu mic crește semnificativ performanța fire în comparație cu NPM
  3. fire, de asemenea, face uz de un fișier de blocare numit yarn.lock, astfel încât proiectele dvs. vor funcționa corect pentru toți colegii de echipă. Acest concept este, de asemenea, denumit un algoritm de instalare determinist
  4. este dotat cu un verificator de licență încorporat care poate fi util în diferite scenarii atunci când dezvoltați aplicații
  5. spre deosebire de NPM, Fire folosește o abordare numită descărcări paralele. Acesta permite fire de a utiliza mai multe resurse pentru a accelera procesul de construire
  6. se poate încerca din nou în mod automat cererea HTTP în caz de eșec. Această caracteristică este utilă în special atunci când vă confruntați cu probleme temporare de internet

beneficiile pnpm:

  1. este compatibil cu npm, dar oferă, de asemenea, o utilizare semnificativ mai bună a spațiului pe disc și viteză
  2. pnpm instalează toate pachetele într-o singură locație și apoi folosește legături simbolice pentru a le face referire. Acesta introduce un concept complet nou numit sistem de stocare adresabil conținutului, care permite pnpm să detecteze diferența dintre fișiere. La rândul său, nu duplicat fișiere neschimbate în două versiuni diferite ale unui pachet
  3. cea mai recentă versiune, 5.8.0, introduce o nouă setare Fire-bash-ca numit shell-emulator, un mediu coajă cross-platform
  4. pnpm are un mecanism strict de control al accesului, ceea ce înseamnă că un pachet poate accesa doar dependențele care sunt definite în package.json fișier

comparație Manager de pachete

ușurința de utilizare

NPM, fire, și pnpm oferă comenzi aproape identice pentru, și toate sunt ușor de utilizat. Iată un exemplu de comenzi utilizate în mod obișnuit:

NPM Fire pnpm
npm install fire install pnpm install
npm update fire upgrade pnpm update

speed

nu există nicio potrivire cu pnpm atunci când vine vorba de viteza și performanța acestor manageri de pachete. Conform unui punct de referință al diferitelor cazuri de utilizare, pnpm a arătat viteze de performanță de până la 3 ori mai rapide decât npm.

vitezele firelor și npm sunt comparabile. În unele cazuri, firele au un avantaj semnificativ față de npm, dar există scenarii în care npm este o alegere mai potrivită. De exemplu, dacă efectuăm o operație de instalare folosind doar node_modules și omitem cache și lock file funcționalitate, atunci npm ar putea oferi o viteză de 5 ori mai bună. În mod similar, dacă folosim toate cele trei funcționalități, atunci fire ar putea spori performanța și devine de 11 ori mai rapid decât npm.

securitate

avantajul major al Fire peste npm este că verifică integritatea fiecărui pachet folosind sume de control. Procesul de verificare se face înainte de a executa orice cod din pachet, astfel încât elimină orice șanse de vulnerabilitate a deturnării pachetelor.

pe de altă parte, npm este un pic mai iertător atunci când vine vorba de lucrul cu pachete proaste. Este încă în evoluție pentru a oferi cele mai bune practici pentru securitate. Dar, npm are, în general, o reputație proastă în ceea ce privește securitatea.

în trecut, au existat unele vulnerabilități de securitate în npm care au afectat direct multe proiecte. De exemplu, în versiunea npm 5.7.0, când executați comanda sudo npm pe un sistem de operare bazat pe Linux (OS), a existat posibilitatea de a schimba proprietatea fișierelor de sistem, făcând sistemul de operare inutilizabil.în mod similar ,un alt incident de furt de bitcoins a avut loc în 2018. Practic, nodul popular.Pachetul JS EventStream a adăugat o dependență rău intenționată flatmap-stream în versiunea sa 3.3.6. Acest pachet rău intenționat a fost ambalat cu o sarcină utilă criptată care încearcă să fure bitcoins de la mașina dezvoltatorului.

pnpm combină atributele pozitive ale npm și fire pentru a oferi o securitate și mai bună. De asemenea, implementează un mecanism strict de control al accesului care leagă un pachet de a utiliza numai propriile dependențe care sunt definite în package.json fișier.

stabilitate

npm, fire și pnpm au trecut prin mai multe faze în ultimii ani. De-a lungul timpului, baza lor de cod S-a maturizat, deoarece au primit tone de contribuții din partea comunității open-source.

și, odată cu trecerea timpului, apar noi concepte și idei care ar putea introduce schimbări de rupere. La momentul redactării acestui ghid, toți acești manageri de pachete sunt în formă bună și îi puteți folosi în proiectele dvs. fără probleme.Fire este susținută de Facebook și Google, npm este susținută de Microsoft și Node.js, iar pnpm este dezvoltat în cea mai mare parte de o persoană, deși are acum peste 75 de colaboratori — astfel încât să puteți depinde de acești manageri de pachete pentru a vă crea următorul proiect.

suport pentru monorepos

Monorepos sunt în mare parte preferate de marile companii de tehnologie pentru a stoca și gestiona bazele lor de cod masive. npm a fost conceput doar pentru a gestiona proiecte individuale. De acum, nu are nicio funcționalitate pentru a sprijini monorepos. Dar atât fire, cât și pnpm au suport complet pentru monorepos, datorită conceptului lor de spații de lucru.

Deterministic — fișierul de blocare

toți cei trei manageri de pachete sunt împachetați cu funcționalitatea fișierului de blocare. Acesta permite dezvoltatorilor diferite pentru a instala exact aceeași copie a proiectului. npm folosește un fișierpackage-lock.json, Fire foloseșteyarn.lock, iar pnpm foloseștepnpm-lock.yaml.

concluzie

Dacă sunteți în căutarea unei soluții care să vă ofere o viteză mai bună și o utilizare eficientă a memoriei, ar trebui să luați în considerare utilizarea pnpm.

dacă manipulați monorepos, puteți utiliza pnpm sau fire pentru a face acest lucru. Cu toate acestea, rețineți că Fire trimite date de Utilizare către Facebook, ceea ce poate să nu facă din fire o alegere potrivită în unele scenarii.

fire, de asemenea, nu acceptă versiunea 5 A Nod.js. În acest sens, npm este o opțiune preferată pentru nod.proiecte bazate pe js, deoarece este recomandat de nodul.echipa js. Zilele astea, Node.js vine cu NPM în mod implicit.

cu npm, ar trebui să luați în considerare istoria sa cu probleme de securitate, care au declanșat dezvoltarea firelor, care a fost creată și pentru a rezolva mulți emitenți prezenți în npm. Deci, dacă sunteți preocupat de securitatea proiectelor dvs., luați în considerare utilizarea fire în loc de npm.

LogRocket: depanare JavaScript erori mai ușor prin înțelegerea contextului

codul de depanare este întotdeauna o sarcină plictisitoare. Dar cu cât înțelegeți mai mult erorile, cu atât este mai ușor să le remediați.

LogRocket vă permite să înțelegeți aceste erori în moduri noi și unice. Soluția noastră de monitorizare frontend urmărește implicarea utilizatorului cu frontendurile JavaScript pentru a vă oferi posibilitatea de a afla exact ce a făcut utilizatorul care a dus la o eroare.

Logrocket Dashboard Free Trial Banner

logrocket înregistrează jurnalele consolei, timpii de încărcare a paginii, stacktraces, cererile / răspunsurile lente ale rețelei cu anteturi + corpuri, metadatele browserului și jurnalele personalizate. Înțelegerea impactului codului JavaScript nu va fi niciodată mai ușoară!

încercați-l gratuit.

Related Posts

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *