in moderne applicatieontwikkeling schrijven we niet alles vanaf nul. In plaats daarvan gebruiken we liever bestaande open-source pakketten. Elk van deze pakketten heeft zijn eigen onderhouders en gemeenschap. Dus, het gebruik van een pakket in onze projecten geeft ons een aantal voordelen, zoals snellere ontwikkeling, toegang tot nieuwe, regelmatige updates, en een betere beveiliging dan op maat gemaakte script.
Het is gebruikelijk dat een pakket afhankelijk is van vele andere pakketten om correct te werken. Lodash zelf is ook afhankelijk van verschillende pakketten, maar ook van lodash zelf. Met andere woorden, de geneste afhankelijkheden kunnen soms zo complex worden dat ze niet in staat zijn om afhankelijkheidsbeheer handmatig af te handelen.
Hier is wanneer een pakketbeheerder zeer nuttig is. Package managers zijn gereedschappen die automatisch de afhankelijkheden van een project afhandelen.
bijvoorbeeld, een pakketbeheerder kan nieuwe — of bestaande — pakketten installeren met een enkel commando. Omdat alles geautomatiseerd is, dus er is geen kans op menselijke fouten. Als JavaScript-ontwikkelaars hebben we toegang tot verschillende pakketbeheerders. Maar in deze gids zullen we de drie populairste vergelijken:
- npm
- garen
- pnpm
- overzicht van pakketbeheerders
- eigenschappen van npm, Yarn en pnpm
- voordelen van npm:
- voordelen van garen:
- voordelen van pnpm:
- pakketbeheer vergelijking
- gebruiksgemak
- Snelheid
- beveiliging
- stabiliteit
- ondersteuning voor monorepo ‘s
- deterministisch-het lock-bestand
- conclusie
- LogRocket: debug JavaScript-fouten eenvoudiger door de context te begrijpen
overzicht van pakketbeheerders
npm was de eerste pakketbeheerder die de concepten registry protocol en packaging standards introduceerde. Het werd uitgebracht in 2010 en officieel aangenomen door The Node.js team kort daarna, dat was het keerpunt voor npm.
na het enorme succes van Node.js, npm kreeg ook tractie van de ontwikkelaar gemeenschap. Het biedt een online register voor JavaScript-pakketten, evenals een command-line tool die werkt met het register te installeren en bij te werken afhankelijkheden.
maar er zijn weinig nadelen van npm die de ontwikkeling van garen en pnpm hebben veroorzaakt. Bijvoorbeeld, npm is aanzienlijk langzamer dan zijn tegenhangers. Het heeft ook een geschiedenis van ernstige beveiligingsproblemen.
dus, grote tech bedrijven zoals Facebook en Google aarzelden om te blijven gebruiken npm. Op zijn beurt, ze samen inspanningen om een betere versie van npm te ontwikkelen en noemen het garen. Ondertussen ontwikkelde de Oekraïense Ontwikkelaar Zoltan Kochan pnpm.
eigenschappen van npm, Yarn en pnpm
al deze pakketbeheerders zijn open-source, wat betekent dat u volledige toegang hebt om de interne werking van elk pakket te controleren. Soms is dit zelfs een vereiste in de ontwikkeling van applicaties op ondernemingsniveau.
voordelen van npm:
- genereert automatisch een
package-lock.json
bestand. Het is handig om te committen naar een versiebeheersysteem. Op deze manier kunnen andere ontwikkelaars eenvoudig de afhankelijkheden installeren op hun lokale machines - lokale of globale afhankelijkheden beheren met gemak
- npm is goed uitgerust om meerdere versies van afhankelijkheden af te handelen
- Het heeft een officieel register dat meer pakketten bevat dan pypi, rubygems, of packagist
voordelen van garen:
- garen lost veel problemen op die in een Monorepo voorkomen. Bijvoorbeeld, als je meerdere pakketten onder dezelfde repository onderhoudt en ze hebben allemaal een apart
package.json
bestand, dan kun je alle pakketten eenvoudig bijwerken met Yarn, dankzij het concept van werkruimtes dat afhankelijkheden van alle pakketten in een repository kan installeren, allemaal in één keer. Met npm moet u hetnpm install
Commando handmatig uitvoeren binnen elke pakketmap. - garen maakt gebruik van een offline cache-mechanisme, wat betekent dat wanneer u een pakket voor de eerste keer installeert, garen het toevoegt aan een cache-map onder
~/.yarn-cache
. Dus, de volgende keer dat je dit pakket nodig hebt, zal garen het ophalen uit de lokale cache in plaats van het maken van een HTTP-verzoek aan de server. Deze kleine verbetering verhoogt aanzienlijk de prestaties van garen in vergelijking met npm - garen maakt ook gebruik van een lock-bestand genaamd
yarn.lock
, zodat uw projecten correct werken voor alle teamgenoten. Dit concept wordt ook wel aangeduid als een deterministisch installatiealgoritme - het zit boordevol met een ingebouwde Licentiecontrole die handig kan zijn in verschillende scenario ‘ s wanneer u toepassingen
- ontwikkelt in tegenstelling tot npm, gebruikt Yarn een aanpak genaamd parallelle downloads. Het stelt Yarn in staat om meer bronnen te gebruiken om het bouwproces te versnellen
- het kan de HTTP-aanvraag automatisch opnieuw proberen in geval van een storing. Deze functie is vooral handig wanneer u te maken krijgt met tijdelijke internetproblemen
voordelen van pnpm:
- Het is compatibel met npm, maar biedt ook aanzienlijk beter schijfruimte gebruik en snelheid
- pnpm installeert alle pakketten op een enkele locatie en gebruikt dan symlinks om ze te verwijzen. Het introduceert een volledig nieuw concept genaamd een content-adresseerbare opslagsysteem dat pnpm in staat stelt om het verschil tussen bestanden te detecteren. Op zijn beurt dupliceert het geen ongewijzigde bestanden in twee verschillende versies van een pakket
- de laatste versie, 5.8.0, introduceert een nieuwe Yarn-bash-achtige instelling genaamd shell-emulator, een cross-platform shell omgeving
- pnpm heeft een strikt Toegangscontrole mechanisme, wat betekent dat een pakket alleen toegang heeft tot de afhankelijkheden die zijn gedefinieerd in zijn
package.json
bestand
pakketbeheer vergelijking
gebruiksgemak
npm, garen en pnpm bieden bijna identieke commando ‘ s voor hun verschillende operaties, en ze zijn allemaal makkelijk te gebruiken. Hier is een voorbeeld van hun veelgebruikte commando ‘ s:
npm | Garen | pnpm |
---|---|---|
npm installeren | garen installeren | pnpm installeren |
npm-update | garen upgrade | pnpm update |
Snelheid
Er is geen match voor de pnpm als het gaat om de snelheid en prestaties van deze package managers. Volgens een benchmark van verschillende use cases, pnpm heeft laten zien prestaties snelheden tot 3x sneller dan npm.
De snelheden van garen en npm zijn vergelijkbaar. In sommige gevallen heeft garen een aanzienlijk voordeel ten opzichte van npm, maar er zijn scenario ‘ s waarbij npm een geschiktere keuze is. Bijvoorbeeld, als we een installatiebewerking uitvoeren door gewoon node_modules
te gebruiken en cache
en lock file
functionaliteit over te slaan, dan kan npm 5x betere snelheid bieden. Evenzo, als we gebruik maken van alle drie de functionaliteiten, dan garen zou kunnen stimuleren zijn prestaties en wordt 11x sneller dan npm.
beveiliging
Het grote voordeel van garen ten opzichte van npm is dat het de integriteit van elk pakket verifieert met behulp van checksums. Het verificatieproces wordt gedaan voordat het uitvoeren van een code van het pakket, dus het gooit alle kansen van pakket kaping kwetsbaarheid.
aan de andere kant, npm is een beetje meer vergevingsgezind als het gaat om het werken met slechte pakketten. Het is nog steeds in ontwikkeling om de beste praktijken voor veiligheid te bieden. Maar, npm heeft over het algemeen een slechte reputatie in termen van veiligheid.
In het verleden waren er enkele beveiligingsproblemen in npm die direct van invloed waren op veel projecten. Bijvoorbeeld, in NPM versie 5.7.0, wanneer u sudo npm
commando uitvoert op een op Linux gebaseerd besturingssysteem (OS), was er een mogelijkheid om de eigenaar van systeembestanden te veranderen, waardoor het besturingssysteem onbruikbaar werd.
evenzo, een ander incident van het stelen van bitcoins gebeurde in 2018. Kortom, het populaire knooppunt.js package EventStream heeft een kwaadaardige afhankelijkheid toegevoegd flatmap-stream
in versie 3.3.6. Deze kwaadaardige pakket was verpakt met een versleutelde lading die probeert om bitcoins te stelen van de machine van de ontwikkelaar.
pnpm combineert de positieve eigenschappen van zowel npm als garen om nog betere beveiliging te bieden. Het implementeert ook een strikt toegangscontrolemechanisme dat een pakket bindt om alleen zijn eigen afhankelijkheden te gebruiken die zijn gedefinieerd in zijn package.json
bestand.
stabiliteit
npm, garen en pnpm hebben de afgelopen jaren verschillende fasen doorgemaakt. Na verloop van tijd, hun codebase is gerijpt omdat ze hebben ontvangen ton van bijdragen van de open-source gemeenschap.
en, met het verstrijken van de tijd, nieuwe concepten en ideeën verschijnen die breken veranderingen kunnen introduceren. Op het moment van het schrijven van deze gids, al deze Pakket managers zijn in goede vorm en u kunt ze gebruiken in uw projecten zonder problemen.
garen wordt ondersteund door Facebook en Google, npm wordt ondersteund door Microsoft en Node.js en pnpm worden meestal ontwikkeld door een individu, hoewel het nu meer dan 75 medewerkers heeft — dus u kunt op deze pakketbeheerders vertrouwen om uw volgende project te maken.
ondersteuning voor monorepo ‘s
Monorepo’ s hebben meestal de voorkeur van grote technologiebedrijven om hun enorme codebases op te slaan en te beheren. npm is alleen ontworpen om individuele projecten te beheren. Vanaf nu heeft het geen functionaliteit om monorepos te ondersteunen. Maar zowel garen als pnpm hebben volledige ondersteuning voor monorepos, dankzij hun concept van werkruimten.
deterministisch-het lock-bestand
alle drie de pakketbeheerders zitten vol met de functionaliteit van het lock-bestand. Het stelt verschillende ontwikkelaars in staat om exact dezelfde kopie van het project te installeren. npm gebruikt een package-lock.json
bestand, Yarn gebruikt yarn.lock
, en pnpm gebruikt pnpm-lock.yaml
.
conclusie
Als u op zoek bent naar een oplossing die u een betere snelheid en efficiënt geheugengebruik geeft, moet u ten zeerste overwegen om pnpm te gebruiken.
Als u monorepos gebruikt, kunt u pnpm of garen gebruiken om dit te doen. Echter, in gedachten houden dat garen stuurt gebruiksgegevens naar Facebook, die niet garen een geschikte keuze in sommige scenario ‘ s kan maken.
garen ondersteunt ook Versie 5 van Node niet.js. In dit opzicht is npm een voorkeursoptie voor Node.js – gebaseerde projecten omdat het wordt aanbevolen door de Node.js team. Tegenwoordig, Node.js wordt standaard geleverd met npm.
bij npm moet u rekening houden met de geschiedenis met beveiligingsproblemen, die de ontwikkeling van garen veroorzaakte, die ook werd gemaakt om veel emittenten op te lossen die aanwezig waren in npm. Dus, als u zich zorgen maakt over de veiligheid van uw projecten, overwegen met behulp van garen in plaats van npm.
LogRocket: debug JavaScript-fouten eenvoudiger door de context te begrijpen
Debugcode is altijd een vervelende taak. Maar hoe meer je je fouten begrijpt, hoe makkelijker het is om ze op te lossen.
LogRocket stelt u in staat om deze fouten op nieuwe en unieke manieren te begrijpen. Onze frontend monitoring oplossing volgt de betrokkenheid van gebruikers met uw JavaScript-frontends om u de mogelijkheid te geven om uit te vinden wat de gebruiker precies deed dat tot een fout heeft geleid.
LogRocket registreert console logs, pagina laadtijden, stacktraces, trage netwerk verzoeken/reacties met headers + lichamen, browser metadata, en aangepaste logs. Het begrijpen van de impact van uw JavaScript-code zal nooit gemakkelijker zijn!
probeer het gratis.