all
Business
data science
design
development
our journey
Strategy Pattern
Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.
Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.
Anjali Ariscran
Andre Santos

19. april 2024

Min Read

Garn vs NPM: Hvilken pakkehåndtering skal jeg bruge?

Hvad er NPM? Og hvad er garn?

NPM og garn er to af de mest populære pakkeadministratorer blandt JavaScript- og Node.js udviklere. De gør det lettere at håndtere et projekts afhængigheder, dvs. alt, som et projekt er afhængig af, eller et stykke kode, der er nødvendigt for, at det fungerer korrekt. Vi har brug for dem, fordi vedligeholdelse af projektets afhængigheder er en udfordrende opgave, der kræver, at vi installerer, afinstallerer, ændrer eller opgraderer dem.

Lad denne artikel hjælpe dig med at forstå, hvad der præcist pakkeadministratorer er, hvordan Garn vs NPM Sammenlign med hinanden, og hvilke funktioner Gør arbejdet med den ene bedre end den anden.

blue arrow to the left
Imaginary Cloud logo

Hvad er en pakkehåndtering?

Pakkeadministratorer eller Pakkehåndteringssystemer er samlinger af værktøjer, der hjælper dig med at installere, fjerne, ændre, opgradere og konfigurere computerprogrammer samt kontrollere afhængigheder og rapportere, hvilke der skal opgraderes for at afbøde potentielle sårbarheder.

I dagens verden er udviklere afhængige af pakket software, hvilket betyder, at softwaren kommer inden for en enkelt fil, der pakker alt, hvad der er nødvendigt for at få softwaren til at fungere på vores system. Hvis ikke alt, indeholder det i det mindste referencer til, hvor systemet kan få de oplysninger, det har brug for.

For at fortælle et pakkehåndteringssystem, hvordan det skal håndtere, hvad der er indeni, indeholder pakkerne:

  • Kildekode
  • Forudbyggede binære filer
  • Manuskripter
  • Metadata

Scripterne og metadataene besvarer for eksempel spørgsmål som:

  • Skal softwaren overføres til en separat mappe?
  • Skal det kompileres?
  • Har den nogen afhængigheder eller forudsætninger, der skal opfyldes ved at installere anden software for at den kan fungere korrekt?
  • Hvad skal der gøres før eller efter kompilering eller flytning af filerne til deres endelige destination?


Alle de oplysninger, der er nødvendige for at besvare disse spørgsmål, er samlet i en pakke, ligesom Garn vs NPM. Lad os nu se på hver af disse pakkeadministratorer.

blue arrow to the left
Imaginary Cloud logo

Hvad er NPM?

NPM (Node Package Manager) er standard kommandolinjeværktøj til installation af Node.js afhængigheder og en offentlig database med JavaScript-pakker, For nylig erhvervet af Microsoft. Det repræsenterer indgangspunktet i økosystemet af open-source JavaScript-moduler og værktøjet omkring at arbejde med og styre disse moduler.

Hvad bruges Node Package Manager til?

Det bruges ofte til at udgive, lokalisere, installere og udvikle Node-programmer og applikationer. Til det gør det brug af flere forskellige komponenter:

  • Node Package Manager-registreringsdatabasen
  • Den npmjs.com hjemmeside
  • NPM kommandolinjeværktøj
  • NPM, Inc.

NPM-registreringsdatabasen

Den NPM-registreringsdatabasen er en vigtig del af Node Package Manager-økosystemet. Dens softwareregister er en offentlig database af JavaScript-kode, værktøjer, biblioteker og rammer, der er tilgængelige til download og brug i dine applikationer.

Dette register er det største softwareregister på internettet, med i øjeblikket næsten 1 million pakker tilgængelige online. Alle kan frit distribuere deres JavaScript-moduler ved at offentliggøre dem som pakker på NPM. Registreringsdatabasen er kernen og forbinder millioner af udviklere over hele verden med de pakker og værktøjer, de har brug for for at få arbejdet gjort.

I stedet for at skrive din ansøgning helt fra bunden, kan du bruge moduler udgivet af Node Package Manager for at hjælpe dig i din udviklingsproces. For eksempel er Express.js den mest populære serverramme til Node.js - du kan downloade den fra NPM og have en server, der kører i blot et par kodelinjer.

Denne tilgængelighed af genanvendelige moduler hjælper med at fremskynde Node.js udvikling betydeligt ved at reducere mængden af applikationsspecifik kode, du skal skrive.

npmjs.com

Med den utrolige mængde pakker, der er tilgængelige i registreringsdatabasen, kan det være udfordrende at finde den rigtige til at løse dit problem. Men det er her NPM webside kommer godt med.

<a href="www.npmjs.com“; target="_blank">npmjs.com er web-front-end til Node Package Manager-registreringsdatabasen. Det er det centrale sted at søge gennem alle tilgængelige offentlige pakker i NPM-økosystemet.

Hver pakke i registreringsdatabasen har sin egen side på Node Package Manager-webstedet. Du kan se pakkeoplysninger, brugsstatistikker, links til pakkelageret, problemsporing og andre metadata om hver pakke. Disse oplysninger er meget nyttige, når du beslutter dig for en pakke til din ansøgning.

Fordi alle kan offentliggøre til NPM-registreringsdatabasen, er der ingen kvalitetsgaranti for en bestemt pakke. Så når det er muligt, foreslår vi dig vælg en populær, aktivt vedligeholdt pakke der fokuserer på det problem, du forsøger at løse mere specifikt.

Se på listen over pakker, der er tilgængelige på npmjs.com

NPM kommandolinjeværktøj

Den NPM kommandolinje (CLI) værktøjet er standardpakkehåndteringen bundtet med Node.js. Det hjælper dig installere og administrere afhængigheder. Det er ansvarligt for at hente pakker fra registreringsdatabasen og installere dem i din node_moduler mappe, hvor de er tilgængelige fra din kode.

Det vil også Opdater afhængighederne notering i din pakke.json fil, når du installerer nye afhængigheder, hvilket er vigtigt.

Det er vigtigt at nævne, at CLI er nyttig ud over installation af afhængigheder. Det er med dig under alle faser af udviklingscyklussen, hjælper dig oprette, køre, administrere og dele Node.js pakker og programmer. Der er mange kommandoer til rådighed, men her er nogle af de vigtigste:

  • npm installation - Hjælper dig med at installere afhængigheder.
  • npm start - Bruges til at generere en pakke.json fil.
  • npm revision - Beder om en rapport om kendte sårbarheder.
  • npm opdatering - Hjælper dig med at opdatere de installerede versioner af dine afhængigheder.
  • npm afinstallere - Fjerner afhængigheder fra begge pakke.json og den node_moduler fortegnelse.
  • npm løb - Hjælp dig med at køre scripts oprettet i din pakke.json.
  • npm start - Kører dit projekts startscript.
  • npm udgive - Udgiver din pakke til NPM-registreringsdatabasen.

NPM Inc.

NPM Incorporated, selskabet er ansvarlig for hosting og vedligeholdelse af NPM-registret og npmjs.com.

Node Package Manager startede som et open source-program oprettet i 2009. Siden da er det vokset betydeligt. I 2014 blev NPM Inc. grundlagt for at understøtte Node Package Manager-registret som en bæredygtig gratis tjeneste.

Virksomhedens vigtigste for-profit-produkt tilbyder private udgivelsespakker til NPM-registret til intern brug af virksomheder, teams og virksomhedsvirksomheder. En betalt konto er dog rent valgfri, og det forbliver en gratis tjeneste, som du ikke er forpligtet til at registrere dig for.

Som allerede nævnt er NPM-registret en kritisk del af JavaScrip-økosystemet, og det er vigtigt at forstå, hvem der er ansvarlig for dette økosystem. I øjeblikket er det NPM Inc., som de kontrollere registret og træffe beslutninger om dets fremtid.

Læs også:

Hvad er garn?

Yarn er en JavaScript-pakke og afhængighedshåndtering bygget af Facebook i 2016 og understøttet af Google, Exponent og Tilde. Det blev oprettet for at løse manglerne ved ældre versioner af NPM CLI, og det fik hurtigt opmærksomhed og støtte fra et stort open source-samfund.

I dag er Garn et populært alternativ til npm, fordi det er hurtigt og nemt at bruge.

Ligesom NPM, Garn giver dig mulighed for at bruge og dele kode med andre udviklere over hele verden, så du ikke behøver at genopfinde hjulet, dvs. du kan bruge kode, som andre udviklere har skrevet og offentliggjort. Dette gør det lettere for dig at bygge software ved at give dig mulighed for at bruge andre udvikleres svar på specifikke problemer.

Da Yarn er bygget oven på NPMs register, er pakker, der er offentliggjort her, også tilgængelige på Yarn, hvilket hjælper med en problemfri opgradering.

Hvad bruges Yarn Package Manager til?

Pakkeadministratorernes rolle som Garn skal give dig mulighed for at installere funktioner hurtigt og sikkert; dette gøres også via kommandolinjeinstruktioner.

Når en funktion tilføjes, downloader den den nødvendige kode fra et lager og tilføjer den til projektet samt tilføjer de nødvendige referencer, hvis pakken har brug for andre biblioteker som afhængighed for at fungere korrekt.

Yarn er derfor en pakkehåndtering, der installerer, ændrer og sletter funktioner i webapplikationer. Det er også et open source-værktøj, der dukkede op til forbedre nogle problemer, som Node Package Manager præsenterer, som langsomheden og umuligheden af at installere pakker offline.

En særpræg ved Yarns arkitektur er måden at installere pakkerne på, hvilket udføres i tre forskellige faser:

  • Opløsning - Hvor Yarn udfører opslag på poster for at kontrollere eksisterende afhængigheder.
  • Cache-opslag - Garn søger efter nødvendige afhængigheder i cachen for at se, om de allerede er blevet downloadet. Hvis de ikke findes, downloades de først til cachen.
  • Installation - Endelig er afhængighederne installeret i“node_moduler „eller“.garn „mappe, afhængigt af versionen (Garn 2, som vi snart vil dække), og opdateret i Garn-kontrolfilerne.

Da Yarn giver dig adgang til de samme pakker som Node Package Manager, er dens afhængighedskommandoer meget ens:

  • garn tilføj - Tilføjer en pakke til din eksisterende pakke.
  • Garn Init - Starter pakkeudviklingsprocessen.
  • garninstallation - Installerer alle pakkens afhængigheder i pakke.json arkivere
  • garnpublicering - Sender en pakke til pakkestyringssystemet.
  • garn fjern - Fjerner en unødvendig pakke fra den aktuelle pakke.

Garn 4: Den seneste version af Garn

Garn 4 udvider Garn-pakkeadministratorens imponerende innovationsspor yderligere. Denne version tilbyder en masse forbedringer i forhold til sin forgænger og introducerer nye funktioner, såsom en strømlinet installationsproces, hvor Plug'n'Play går et skridt videre.

Her er de spændende facetter af Garn 4:

  • Det anvender en banebrydende tilgang til afhængighedsstyring med forbedret understøttelse af arbejdsområdet.
  • Yarn 4 introducerer en revitaliseret kommando, 'yarn dlx', til effektiv udførelse af single-instance-scripts.
  • Et stort højdepunkt i Yarn 4 er dens modulære arkitektur, hvilket gør plugin-udvikling endnu mere ligetil. At erkende, at adskillige grundlæggende funktioner i Yarn implementeres effektivt som plugins, er afgørende.
  • Den mest bemærkelsesværdige fordel ved Yarn 4 ligger i opgraderingen af Plug'n'Play (PNP) installationsmekanismen, som nu er mere effektiv end den traditionelle pakkeinstallationsmetode.
blue arrow to the left
Imaginary Cloud logo

Garn- og NPM-kommandoer

Her er en tabel, der giver en hurtig reference for udviklere til at forstå de tilsvarende kommandoer mellem npm og garn til forskellige opgaver:

blue arrow to the left
Imaginary Cloud logo

Garn vs NPM: Hvilken er bedst?

Afhængigheder

Garn

Garnversion 1 og NPM håndterer begge afhængigheder på en lignende måde. De gemmer metadataene i pakke.json fil, som er gemt i undermappen - node_moduler.

Garn sporer ikke længere afhængigheder i undermappen nodemoduler fra version 2. Garn 2.0 anvender derimod Plug & Play funktionalitet, som skaber en enkelt .pnp.cjs fil. Denne fil viser et diagram over et projekts afhængighedshierarki.

Yarn installerer afhængigheder ved hjælp af garn kommando. Det installerer afhængigheder samtidigt, dvs. parallelt, så du kan tilføje flere filer samtidigt. Når du installerer afhængigheder, oprettes en låsefil, der gemmer den nøjagtige liste over anvendte afhængigheder. Denne fil er kendt som garn.lock .

NPM

Node Package Manager installerer afhængigheder en efter en gennem npm installation kommando.

Det producerer også en pakke-lock.json versionslåsefil. Denne fil understøttes også af Yarn, så brugerne kan flytte versionsdata fra Node Package Manager til Yarn.

Sikkerhed

Garn

Mens du downloader pakker, Garn foretager en sikkerhedskontrol i baggrunden. Den bruger pakkelicensoplysningerne til at undgå at downloade farlige scripts eller forårsage afhængighedsproblemer.

For at sikre sikker dataflow anvender begge krypteringsteknikker. Garn validerer pakker ved hjælp af kontrolsummer, hvorimod NPM bruger pakke-lock.json filens SHA-512 (Secure Hash Algorithm).

NPM

I sine tidligere versioner var sikkerhedsspørgsmål et stort problem. Hver gang du installerer en pakke, det foretager en sikkerhedsvurdering fra version 6. Dette hjælper til undgå sårbarheder og forsikrer, at ingen afhængigheder er inkompatible.

Den npm revision Kommandoen kan også bruges til at foretage en manuel revision. Hvis det opdager nogen sårbarheder, skal du bruge npm revisionsrettelse til at reparere problemerne.

Funktioner

Begge pakkeadministratorer deler flere grundlæggende funktioner:

  • Oprettelse af låsefiler - Begge pakkeadministratorer producerer som standard en versionslåsefil. Denne fil betegnes som garn.lock i garn og pakke-lock.json i NPM.
  • Fjernscripts - Brug af npx kommando i NPM og garn dlx kommando i Yarn kan du køre scripts eksternt i både NPM og Yarn.
  • Brug af arbejdsområder - De aktiverer begge arbejdsområder, som giver dig mulighed for at administrere afhængigheder for forskellige projekter fra et enkelt lager.

Som allerede nævnt ovenfor omfatter Garns unikke funktioner:

  • Plug & Play - Garn producerer en enkelt .pnp.cjs fil, der kortlægger projektafhængigheder i stedet for at bruge mappen nodemoduler. Dette resulterer i mere strømlinede afhængighedstræer og hurtigere projektstart og pakkeinstallation.
  • Nul installation - Arbejder med Plug'n'Play, da det bruger .pnp.cjs fil til kortlægning af pakker gemt i offline-cachen. Dette giver dig mulighed for hurtigt at hente og installere pakker, der er blevet gemt.
  • Licenskontrol - Garn har en indbygget licenskontrol, når du henter og installerer pakker.

Hastighed

Som tidligere nævnt, Yarn installerer afhængighedspakker parallelt, hvorimod Node Package Manager installerer dem sekventielt. Som et resultat Garn overgår, når du installerer større filer.

Begge værktøjer kan spare afhængige filer til offline-cachen. Dette giver brugerne mulighed for at installere afhængigheder, selv når de er ikke forbundet til internettet.

Garn bruger også Nul installation funktionalitet startende med version 2. Denne funktionalitet udnytter afhængighedskortet fra .pnp.cjs fil til at udføre en offline afhængighedsinstallation med nul forsinkelser.

Læs også:

blue arrow to the left
Imaginary Cloud logo

Skal du bruge garn eller npm i 2024?

Hvad er den bedste pakkehåndtering at bruge til dine projekter? I 2024 fortsætter de to populære kandidater med at være npm, Node.js originale pakkehåndtering, og Garn, den nye dreng på blokken. Begge har bemærkelsesværdige styrker og nogle områder, der har brug for polering. Så spørgsmålet koger ned til dette - skal du vælge Garn eller npm i 2024?

Garn - For hastighed og sikkerhed

Hvis hastighed og deterministiske afhængigheder betyder noget for dig, vil Yarn være dit bedste valg. Yarn populariserede låsefiler, hvilket sikrede, at de samme versioner af afhængigheder installeres på tværs af forskellige systemer, og blev oprindeligt bygget til at være hurtigere, hvilket det stadig er i dag. Deres avancerede understøttelse af monorepo via arbejdsområder er designet til at forenkle orkestreringen af monorepo-pakker og afhængigheder.

Fordele:

  • Yarn giver en offline cache, hvilket øger hastigheden enormt.
  • Understøtter arbejdsområder, der hjælper med at styre monorepo.
  • Sikrer deterministiske afhængighedsinstallationer med sin YARN.lock-fil.

Ulemper:

  • Selvom Yarn har lanceret sin anden store version, er den stadig ved at blive finpudset, og nogle udviklere har svært ved at tilpasse sig den nye opgradering.
  • Ikke alle community-værktøjer er kompatible med Yarn.

npm - For en stabil og robust oplevelse

npm har indhentet Yarn imponerende. Med de betydelige forbedringer påvirket af Yarns model leverer npm CLI en låsefil (package-lock.json) til deterministiske installationer og gør et bemærkelsesværdigt stykke arbejde med sin overordnede funktionalitet. Derudover får sikkerheden mere fokus med funktioner som automatiske advarsler om sårbare afhængigheder og npm audit fix. Også npm-kommandoer er generelt mere intuitive og lettere at huske.

Fordele:

  • npm's version understøtter arbejdsområder, som tidligere var en stor fordel for Yarn.
  • Leveres bundtet med Node.js, hvilket forenkler den oprindelige opsætning.
  • Rige og ligetil CLI-kommandoer og et mere omfattende pakkeregister.

Ulemper:

  • Ydeevnen kan halte bagefter Yarns, især når man beskæftiger sig med store kodebaser.
  • At løse og håndtere flere versioner af den samme pakke er generelt besværligt.

Hvad skal du vælge?

Beslutningen koges ned til, hvad du værdsætter mest, og hvad der passer bedst til dine projektkrav. Hurtighed og effektiv håndtering af monorepos vipper vægten til Garns fordel. Omvendt er npm dit foretrukne valg, hvis du leder efter stabilitet, et robust økosystem og en mere ligetil kommandostruktur. Uanset hvad kommer både npm og Yarn med enorme fordele, der er værd at overveje, hvilket sikrer, at din udviklingsproces i 2024 bliver både effektiv og fornøjelig.

blue arrow to the left
Imaginary Cloud logo

Konklusion

I betragtning af de forskelle og funktioner, der er dækket mellem Garn og NPM, det senere foretrækkes for udviklere, der er fortrolige med og tilfredse med dens nuværende arbejdsgang. Det giver en anstændig brugeroplevelse, samtidig med at du sparer plads på harddisken.

Garn har mere komplekse komponenter ligesom Plug'n'Play og Zero installation gennem Yarn 2. Det er også forbedrer ydeevne og sikkerhed, skønt på bekostning af harddiskkapacitet.

Som vi kan se, bruges begge teknologier på lignende måder, så du bør analysere prioriteten af dit projekt og dine præferencer når man vælger mellem de to.

Husk, at (indtil videre) begge er kompatible, hvilket betyder, at du kan skifte mellem de to med de relevante indstillinger under udviklingen af et projekt, hvis du har brug for det.

New call-to-action
blue arrow to the left
Imaginary Cloud logo
blue arrow to the left
Imaginary Cloud logo
blue arrow to the left
Imaginary Cloud logo
blue arrow to the left
Imaginary Cloud logo
Anjali Ariscran
Anjali Ariscran

Alsidig og datadrevet vækstmarkedsfører med dybdegående forretningskendskab, opdateret med den seneste udvikling i det digitale marketinglandskab.

Read more posts by this author
Andre Santos
Andre Santos

Din daglige webudvikler, der kan lide at gemme sig i backend. Javascript og Ruby er min marmelade. Jeg fumler stadig med Docker, og mine bygninger går i stykker ret ofte.

Read more posts by this author

People who read this post, also found these interesting:

arrow left
arrow to the right
Dropdown caret icon