JavaScript pakke ledere sammenlignet: Garn, npm, eller pnpm?

i moderne applikasjonsutvikling skriver vi ikke alt fra grunnen av. I stedet foretrekker vi å bruke eksisterende open source-pakker. Hver av disse pakkene har sine egne vedlikeholdere og fellesskap. Så, ved å bruke en pakke i våre prosjekter gir oss noen fordeler som raskere utvikling, tilgang til nye, regelmessige oppdateringer og bedre sikkerhet enn skreddersydd skript.

det er vanlig at en pakke avhenger av mange andre pakker for å fungere riktig. Lodash kan også være avhengig av noe som lodash, men lodash selv er avhengig av flere pakker. Med andre ord kan de nestede avhengighetene noen ganger bli så komplekse at de ikke klarer å håndtere avhengighetshåndtering manuelt.

Her er når en pakkebehandling er ekstremt nyttig. Pakkeledere er verktøy som automatisk håndterer avhengighetene til et prosjekt.

en pakkebehandler kan for eksempel installere nye — eller oppdatere eksisterende-pakker med en enkelt kommando. Fordi alt er automatisert, så det er ingen sjanse for menneskelig feil. Som JavaScript-utviklere har vi tilgang til flere pakkeledere. Men i denne veiledningen sammenligner vi de tre mest populære:

  • npm
  • Garn
  • pnpm

Oversikt over pakkeledere

npm var den første pakkebehandleren som introduserte konseptene for registerprotokoll og emballasjestandarder. Den ble utgitt tilbake i 2010 og offisielt vedtatt Av Noden.js team kort tid etterpå, som var vendepunktet for npm.

Etter Den massive suksessen Til Node.js, npm mottok også trekkraft fra utviklerens samfunn. Det tilbyr et online register For JavaScript-pakker, samt et kommandolinjeverktøy som fungerer med registret for å installere og oppdatere avhengigheter.

Men det er få ulemper med npm som utløste utviklingen Av Garn og pnpm. For eksempel er npm betydelig tregere enn sine kolleger. Det har også en historie med alvorlige sikkerhetsproblemer.Så, store tech selskaper Som Facebook Og Google var nølende til å fortsette å bruke npm. I sin tur sluttet de seg til arbeidet med å utvikle en bedre versjon av npm og kalle Det Garn. I mellomtiden utviklet ukrainsk utvikler Zoltan Kochan pnpm.

Funksjoner av npm, Yarn, Og pnpm

Alle disse pakke ledere er åpen kildekode, noe som betyr at du har full tilgang til å sjekke den interne driften av hver enkelt. Noen ganger er dette enda et krav i bedriftsnivå applikasjonsutvikling.

Fordeler med npm:

  1. genererer automatisk enpackage-lock.json fil. Det er nyttig å forplikte seg til et versjonskontrollsystem. På denne måten kan andre utviklere enkelt installere avhengighetene på sine lokale maskiner
  2. Administrer lokale eller globale avhengigheter med letthet
  3. npm er godt rustet til å håndtere flere versjoner av avhengigheter
  4. Den har et offisielt register som har flere pakker enn pypi, rubygems eller packagist

Fordeler Med Garn:

  1. Garn løser mange problemer som vises i En Monorepo. For eksempel, hvis du opprettholder flere pakker under samme depot og de alle har en separatpackage.json fil, kan du enkelt oppdatere alle pakker med Yarn, takket være konseptet med arbeidsområder som kan installere avhengigheter av alle pakker i et depot, alt på en gang. Med npm må du kjøre kommandoennpm install manuelt i hver pakkemappe.
  2. Yarn benytter seg av en frakoblet buffermekanisme, noe som betyr at Når du installerer en pakke for første gang, Legger Yarn den til en buffermappe under ~/.yarn-cache. Så neste gang Du trenger denne pakken, Vil Yarn hente Den fra den lokale hurtigbufferen i stedet for Å lage EN HTTP-forespørsel til serveren. Denne lille forbedringen øker ytelsen Til Garn betydelig sammenlignet med npm
  3. Garn bruker også en låsefil kalt yarn.lock, slik at prosjektene dine vil fungere riktig for alle lagkamerater. Dette konseptet er også referert til som en deterministisk installasjonsalgoritme
  4. den er fullpakket med en innebygd lisenskontroll som kan være nyttig i forskjellige scenarier når du utvikler applikasjoner
  5. I Motsetning til npm, Bruker Yarn en tilnærming kalt parallelle nedlastinger. Det gjør At Yarn å utnytte flere ressurser for å fremskynde byggeprosessen
  6. Det kan automatisk prøve HTTP forespørsel i tilfelle feil. Denne funksjonen er spesielt nyttig når du står overfor midlertidige internettproblemer

Fordeler med pnpm:

  1. den er kompatibel med npm, men gir også betydelig bedre diskplassbruk og hastighet
  2. pnpm installerer alle pakker på ett sted og bruker deretter symlinker til å referere til dem. Det introduserer et helt nytt konsept kalt et innholdsadresserbart lagringssystem som gjør at pnpm kan oppdage forskjellen mellom filer. I sin tur dupliserer den ikke uendrede filer i to forskjellige versjoner av en pakke
  3. sin nyeste versjon, 5.8.0, introduserer En Ny Garn-bash-lignende innstilling kalt shell-emulator, en cross-platform shell miljø
  4. pnpm har en streng tilgangskontroll mekanisme, noe som betyr at en pakke kan bare få tilgang til avhengigheter som er definert i sin package.json fil

Pakkebehandling sammenligning

Brukervennlighet

npm, Garn, Og pnpm tilbyr nesten identiske kommandoer for deres ulike operasjoner, og de er alle enkle å bruke. Her er et eksempel på deres vanlige kommandoer:

npm Pnpm
npm installere garn installere
npm oppdatering Garn oppgradering pnpm oppdatering

speed

det er ingen kamp til pnpm når det gjelder hastighet og ytelse av disse pakke ledere. Ifølge en benchmark av ulike brukstilfeller, har pnpm vist ytelse hastigheter opp til 3x raskere enn npm.

hastigheten På Garn og npm er sammenlignbare. I Noen tilfeller Har Garn en betydelig fordel over npm, men det er scenarier der npm er et mer egnet valg. Hvis vi for eksempel utfører en installasjonsoperasjon ved å bare bruke node_modules og hoppe over cache og lock file funksjonalitet, kan npm tilby 5x bedre hastighet. På samme måte, hvis vi bruker alle tre funksjonene, Kan Yarn øke ytelsen og blir 11x raskere enn npm.

Sikkerhet

Den største fordelen Med Garn over npm er at den verifiserer integriteten til hver pakke ved hjelp av sjekksummer. Bekreftelsesprosessen er gjort før du utfører noen kode fra pakken, så det forkaster noen sjanser for pakken kapring sårbarhet.på den annen side er npm litt mer tilgivende når det gjelder å jobbe med dårlige pakker. Det er fortsatt i utvikling for å tilby de beste praksis for sikkerhet. Men npm har generelt et dårlig rykte når det gjelder sikkerhet.

tidligere var det noen sikkerhetsproblemer i npm som direkte påvirket mange prosjekter. For eksempel, i npm versjon 5.7.0, når du utfører sudo npm kommando På Et Linux-basert operativsystem (OS), var det en mulighet til å endre eierskapet til systemfiler, noe SOM gjorde OS ubrukelig.På Samme måte skjedde en annen hendelse med å stjele bitcoins i 2018. I utgangspunktet den populære Noden.Js pakke EventStream lagt til en ondsinnet avhengighet flatmap-stream i sin versjon 3.3.6. Denne ondsinnede pakken ble pakket med en kryptert nyttelast som prøver å stjele bitcoins fra utviklerens maskin.

pnpm kombinerer de positive egenskapene til både npm og Garn for å gi enda bedre sikkerhet. Den implementerer også en streng tilgangskontrollmekanisme som binder en pakke til bare å bruke sine egne avhengigheter som er definert i package.json – fil.

Stabilitet

npm, Garn og pnpm har gått gjennom flere faser de siste årene. Over tid har kodebasen deres modnet fordi de har mottatt tonnevis av bidrag fra open source-samfunnet.

og med tidenes gang vises nye konsepter og ideer som kan introdusere brytende endringer. Når du skriver denne veiledningen, er alle disse pakkelederne i god form, og du kan bruke dem i prosjektene dine uten problemer.Yarn støttes Av Facebook Og Google, npm støttes Av Microsoft og Node.js og pnpm er for det meste utviklet av en person, selv om den nå har 75 + bidragsytere-slik at du kan stole på disse pakkelederne for å lage ditt neste prosjekt.

Støtte for monorepos

Monorepos er mest foretrukket av store tech selskaper å lagre og administrere sine massive kodebaser. npm ble bare designet for å håndtere individuelle prosjekter. Fra nå av har den ingen funksjonalitet for å støtte monorepos. Men Både Garn og pnpm har full støtte for monorepos, takket være deres konsept av arbeidsområder.

deterministisk-låsefilen

Alle tre pakkelederne er pakket med funksjonaliteten til låsefilen. Det tillater forskjellige utviklere å installere nøyaktig samme kopi av prosjektet. npm bruker en package-lock.json fil, Garn bruker yarn.lock, og pnpm bruker pnpm-lock.yaml.

Konklusjon

hvis du søker etter en løsning som gir deg bedre hastighet og effektiv minnebruk, bør du sterkt vurdere å bruke pnpm.

hvis du håndterer monorepos, kan du bruke pnpm eller Garn for å gjøre det. Vær imidlertid oppmerksom på At Yarn sender bruksdata Til Facebook, noe som kanskje ikke gjør Yarn til et passende valg i noen scenarier.

Garn støtter heller ikke Versjon 5 Av Node.js. I denne forbindelse er npm et foretrukket alternativ For Node.js-baserte prosjekter fordi Det anbefales Av Noden.js team. I disse dager, Node.js leveres med npm som standard.

med npm bør du vurdere sin historie med sikkerhetsproblemer, noe som utløste utviklingen Av Garn, som også ble opprettet for å løse mange utstedere som var til stede i npm. Så, hvis du er bekymret for sikkerheten til prosjektene dine, bør du vurdere å bruke Garn i stedet for npm.

LogRocket: Debug JavaScript-feil lettere ved å forstå konteksten

Feilsøkingskode er alltid en kjedelig oppgave. Men jo mer du forstår feilene dine, desto lettere er det å fikse dem.

LogRocket lar deg forstå disse feilene på nye og unike måter. Vår frontend overvåking løsning sporer brukerengasjement Med JavaScript frontends å gi deg muligheten til å finne ut nøyaktig hva brukeren gjorde som førte til en feil.

LogRocket Dashboard Gratis Prøveversjon Banner

LogRocket registrerer konsolllogger, sidelastetider, stacktraces, treg nettverksforespørsler/svar med overskrifter + kropper, nettlesermetadata og egendefinerte logger. Forstå virkningen Av JavaScript-koden vil aldri bli enklere!

Prøv det gratis.

Related Posts

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *