Bruken har tredobla seg på ett år – derfor bør du også bytte npm med pnpm

Det største problemet med den alternative pakkehåndteren pnpm er den ekstra bokstaven.

Bør du bytte fra npm til pnpm? Det er i hvert fall stadig flere som gjør det! 📸: Ole Petter Baugerød Stokke
Bør du bytte fra npm til pnpm? Det er i hvert fall stadig flere som gjør det! 📸: Ole Petter Baugerød Stokke Vis mer

I 2017 lanserte utvikleren Zontal Kochan pnpm, som står for "performant npm". For de som ikke kjenner til pnpm, så er det altså en raskere versjon av pakkeverktøyet npm.

Her om dagen leste jeg at pnpm på disse årene hadde rukket å kommet helt opp i versjon 9. Det minnet meg på at jeg faktisk prøvde å bytte til pnpm for et par år siden – men ga opp. Jeg skal komme tilbake til hvorfor litt senere.

Men siden pnpm ikke bare skal være raskere, men også spare en masse diskplass, har jeg nå bestemt meg for å bytte! Igjen.

Versjon 9 av pnpm har fått noen mindre nyheter som de fleste brukere av pnpm antagelig ikke kommer til å merke så mye til. Med mindre du bruker Node.js 16 eller 17 – for dette er ikke støttet lenger.

Nedlastinger skyter i været

Til tross for at ikke så veldig mye er nytt i den nye versjonen, mener jeg – og åpenbart mange andre – at det er en masse gode grunner til å bytte ut npm med pnpm:

Bruken av pnpm har nemlig nesten tredoblet seg i løpet av det siste året, etter å ha femdoblet seg året før.

Vi snakker altså om 15 ganger flere nedlastinger i mars 2024 sammenlignet med mars 2022!

📸: npm-stat.com
📸: npm-stat.com Vis mer

Hvorfor bruke pnpm?

Hva er egentlig vitsen med å bruke noe annet enn npm for å installere pakker? Npm fungerer jo?

Vi har allerede vært inne på én av grunnene: pnpm er mye raskere enn npm. Skriver du pnpm install i stedet for npm install skjer installasjonen vanligvis mye raskere. Rundt dobbelt så raskt, ifølge pnpm selv.

En like viktig grunn til å bytte, er at du sparer masse diskplass! Hvis du har 100 prosjekter med én avhengighet hver, så vil du ha 100 node_modules-mapper med hver sin kopi av denne avhengigheten. En for hvert prosjekt.

Med pnpm lagres avhengighetene for alle prosjektene i én felles mappe. Så vil hvert prosjekt ha en node_modules-mappe med hard links til disse filene.

Hvis ett av prosjektene dine trenger en annen versjon av avhengigheten enn de andre prosjektene, så legges kun de filene som er forskjellige til i arkivet.

Resultatet er at du sparer mye diskplass – spesielt om du har mange prosjekter: Har du 100 prosjekter som hver bruker samme avhengighet på 1 MB, så tar avhengigheten opp bare 1 MB. Med npm ville du brukt 100 MB diskplass.

Med pnpm samles alle avhengigheter i node_modules på ett sted, som så deles mellom prosjekter. 📸: Reddit r/programmerHumor (Kilde ukjent)
Med pnpm samles alle avhengigheter i node_modules på ett sted, som så deles mellom prosjekter. 📸: Reddit r/programmerHumor (Kilde ukjent) Vis mer

Jeg hater den ekstra bokstaven!

Så tilbake til hvorfor jeg for et par år siden ga opp å bruke pnpm. Det var rett og slett noe så dumt som at pnpm har én ekstra bokstav å taste inn!

Hver gang jeg prøvde å skrive pnpm, endte jeg opp med å skrive npm. De tre bokstavene lå nærmest i "muskelminnet". Og så stokket det seg alltid når jeg skulle skrive bokstavene fort på tastaturet: N kom foran p, eller plutselig hadde m-en havnet på feil sted. Eller det dukket opp en p til slutt! "command not found: pnpmp". Hrmfpf...

Derfor er det første jeg har gjort nå når jeg på nytt skal ta i bruk nppm å lage et alias slik at jeg kan taste forkortelsen pn i stedet for pnpm.

«De tre bokstavene lå nærmest i muskelminnet.»

På macOS eller Linux gjøres dette enkelt:

  • Åpne terminalen og skriv inn vim ~/.zshrc. Har du Linux bruker du kanskje Bash som shell, da skriver du vim ~/.bashrc
  • Gå til slutten av filen og tast inn alias pn="pnpm" (du må trykke bokstaven "i" for å gå til redigeringsmodus i Vim)
  • Trykk escape og :wq for å lagre og avslutte.
  • Så taster du inn source ~/.zshrc (eller source ~/.bashrc) for å gjøre aliaset tilgjengelig med umiddelbar virkning

Sjekk at det fungerer ved å taste pn --version

💬 Har du gode eller dårlige erfaringer med å bruke pnpm eller andre alternativer til npm? Bruker du kanskje yarn? Del gjerne erfaringene dine i kommentarfeltet!