En af de bedste funktioner i Node er pakkeadministratorer. Der er mange forskellige måder at installere og administrere nodepakker på. Her vil vi se på fordele og ulemper ved at bruge én pakkehåndtering eller bruge mere end én pakkehåndtering, og nogle af de bedste måder at bruge dem sammen.
Hvad er en pakkeadministrator spørger du? Læs videre for at finde ud af det.
Hvad er pakkeadministratorer?
I softwareudviklingens verden er afhængigheder det, du skal bruge for at køre dit projekt. De er som ingredienser i en opskrift: uden dem sker der intet.
For eksempel hvis du skriver en app, der bruger JavaScript, og den vil have adgang til nogle funktioner fra et bibliotek kaldet jQuery (som mange websteder engang brugte), så vil jQuery være en af dine afhængigheder. Du skal have det installeret, så når nogen besøger dit websted, kan de se de fede animationer eller interaktioner, du har oprettet med det!
Pakkeadministratorer hjælper med at styre disse relationer mellem projekter ved at administrere afhængigheder for os, så vi ikke behøver at bekymre os om manuelt at downloade dem hver gang vi vil have noget nyt tilføjet eller opdateret - de sørger også for, at alt fungerer korrekt og kører problemfrit, når det først er installeret (hvilket nogle gange er lettere sagt end Færdig).
Node leveres færdigpakket med en pakkeadministrator kaldet NPM
NPM er standardpakkemanageren, og som sådan er den indbygget i noden runtime. Du kan bruge NPM til at installere pakker fra GitHub eller NPM direkte. Du kan også udgive dine pakker til dette websted, så andre kan installere dem ved hjælp af deres version af NPM.
NPM bruges ikke kun til at installere pakker; det håndterer også afhængighedsløsning og versionskonflikter mellem to eller flere nødvendige biblioteker eller moduler i din applikationskodebase.
Det betyder, at hvis der er flere versioner af noget lignende Express kører på din server på ethvert givet tidspunkt vil NPM sørge for, at hver instans får, hvad den har brug for uden at komme i konflikt med andre tilfælde, der udfører lignende arbejde - og alt sammen uden at du behøver at gøre noget særligt ud over blot ringer kræve() på en genstand, når det er nødvendigt!
NPM er et utroligt kraftfuldt værktøj, og det er nemt at komme i gang med det. Men hvis du er ny til Node og JavaScript, kan det være udfordrende at vide, hvilke værktøjer der er tilgængelige til din brug – og hvilke der er bedst til et givet projekt.
Hovedproblemet med NPM er, at det er langsomt at installere pakker. Dette er ikke en stor aftale, hvis du bare kører et enkelt manuskript eller to, men det kan være utroligt frustrerende, hvis du forsøger at bygge en hel applikation, der bruger snesevis af forskellige biblioteker og værktøjer.
Garn og PNPM er hurtigere end NPM
Garn er et sikkert og pålideligt alternativ til NPM, der bruger en låsefil til at forhindre utilsigtede overskrivninger og sikrer, at dine afhængigheder bliver løst korrekt, når du installerer pakker.
Det har også en hurtigere installationstid end NPM, hvilket gør det især nyttigt, hvis du arbejder med store projekter, der har mange moduler med mange afhængigheder.
PNPM er et alternativ til både Yarn og NPM, men det er ikke helt så populært endnu, fordi det ikke har nogle af de funktioner, der findes i nogen af dem (som låsefiler). Dets udviklere hævder dog, at PNPM kan installere pakker op til fire gange hurtigere end Yarn eller NPM takket være dens lette natur; dette betyder også mindre forbrug af diskplads på din computer!
Hvis du bygger et projekt, der kun kræver en håndfuld afhængigheder, vil garn eller NPM sandsynligvis være tilstrækkeligt. Men hvis du arbejder med store projekter med mange moduler og afhængigheder, kan PNPM være den bedre løsning for dig.
Fordele ved at bruge Multiple Package Managers
En enkelt pakkehåndtering kan kun håndtere én version af et givet bibliotek ad gangen. Hvis du vil bruge to forskellige versioner af det samme bibliotek til andre projekter eller i forskellige miljøer (f.eks. produktion vs. udvikling), så skal du have to separate pakker installeret på dit system.
Dette kan føre til konflikter, hvis begge pakker forsøger at opdatere deres version af den samme afhængighed på samme tid. Brug af flere pakkeadministratorer betyder, at du har mere kontrol over, hvilke afhængigheder der er installeret og hvor, hvilket hjælper med at undgå den slags konflikter.
En anden fordel er, at når du bruger flere pakkeadministratorer, vil hver enkelt have sit eget unikke sæt funktioner. Nogle kan være hurtigere end andre; nogle kan have bedre afhængighedsstyringskapaciteter; andre kan være mere velegnede til at udvikle applikationer inden for visse rammer som ReactJS eller VueJS osv...
Endelig kan brug af flere pakkeadministratorer hjælpe med at forbedre din udviklerproduktivitet ved at reducere den tid, der bruges på at søge efter og installere afhængigheder. Dette skyldes, at hver pakkehåndtering vil blive designet med et specifikt sæt af use cases i tankerne (f.eks. hastighed vs. sikkerhed vs. afhængighedsstyring osv.).
Brug flere pakkeadministratorer ved at installere dem globalt
Ved hjælp af kommandolinjen kan du angive, hvilken pakkehåndtering du vil bruge til et specifikt projekt. Konfigurer flere pakkeadministratorer på din maskine:
- NPM leveres færdigpakket med Node. Dette giver dig mulighed for at installere andre pakker (og pakkeadministratorer) fra kommandolinjen og administrere afhængigheder på tværs af alle dine projekter med NPM. Det er også nyttigt, hvis du vil køre NPM-scripts i en browser (f.eks. Webpack), fordi browsere ikke kommer med NPM forudinstalleret!
- Installer garn også globalt ved hjælp af NPM. Dette er en anden populær mulighed for at administrere afhængigheder inden for JavaScript-projekter; det har nogle fordele i forhold til NPM, der kan gøre det at foretrække for visse typer projekter eller teams
- Til sidst skal du installere PNPM. Denne pakkehåndtering er en forgrening af NPM, der er designet til at være hurtigere og mere stabil. Det har også nogle ekstra funktioner, der kan være nyttige til nogle typer projekter, såsom understøttelse af afhængigheder fra GitHub.
Bemærk, at en global installation betyder, at den valgte pakke vil være tilgængelig for hele dit system (du kan få adgang programmet hvor som helst via kommandolinjen), mens en lokal installation kun kan tilgås af den nuværende arbejdende vejviser.
Eksempler fra den virkelige verden på, hvordan du kan bruge flere pakkeadministratorer
Tjek disse anvendelser:
1. Garn og NPM kan bruges sammen (f.eks. opret-reager-app)
Dette er nyttigt, når du vil drage fordel af hastigheden og effektiviteten af Yarn, mens du stadig bevarer kompatibiliteten med NPM-pakker. Hvis du har brug for den seneste version af et bibliotek, der ikke er blevet opdateret for kompatibilitet med Yarn endnu, eller hvis der er en anden grund hvorfor dit team hellere vil holde sig til NPM på trods af dets langsommere hastighed eller begrænsede funktionssæt, så kan dette fungere godt for din projekt. Det hjælper også med at undgå at have to separate afhængighedstræer i din mono-repo-opsætning!
2. Brug af garn til globale pakker og PNPM til lokale installationer
Mens PNPM er den hurtigste pakkehåndtering, kan det være vanskeligt at bruge til globalt installerede pakker. Dette skyldes, at det bruger en anden filstruktur, som kan forårsage kompatibilitetsproblemer med programmer som Visual Studio Code. Det er her Garn kommer ind. Du kan bruge det til dine globalt installerede pakker og PNPM til lokale installationer. Denne løsning er en god måde at få fordelene ved begge pakkeadministratorer uden at skulle ændre din arbejdsgang for meget. Med denne opsætning – hvis du vil blive vild – kan du fjerne NPM fra dit system helt (men det er altid rart at have NPM som backup).
3. Brug af PNPM Med NPM som en reserve
Dette er en god mulighed at overveje, hvis du vil bruge PNPM, men ikke ønsker, at alle dine udviklere skal lære et nyt værktøj endnu. Det giver dem mulighed for at fortsætte med at arbejde med NPM, indtil de er fortrolige med PNPM og har brug for det til deres arbejde.
Brug af flere pakkeadministratorer gør tingene nemmere
Du kan bruge flere pakkeadministratorer. Du kan installere dem globalt eller lokalt, og hvis du vil angive, hvilken pakkehåndtering der skal bruges til et specifikt projekt, skal du blot bruge kommandolinjen!
Hvis du vil installere flere pakkeadministratorer på dit system, skal du sørge for, at du bruger den samme version af Node.js.
Afslutningsvis synes vi, at du skal bruge mere end én pakkehåndtering. Det er en fantastisk måde at komme i gang med Node og også lære nogle nye værktøjer, hvis du allerede er bekendt med NPM. Hvis du ikke allerede har Node installeret, er opsætningen nem på Windows.