Npm-pakkene tar mye mer plass enn du tror

Med pkg-size finner du kjapt ut hvorfor node_modules-mappa regnes blant de tyngste objektene i universet.

Når du installerer en npm-pakke, installeres ofte en haug med andre avhengigheter i tillegg. Ikke rart node_modules-mappa vokser! 📸: Reddit r/programmerhumor (ukjent opprinnelse)
Når du installerer en npm-pakke, installeres ofte en haug med andre avhengigheter i tillegg. Ikke rart node_modules-mappa vokser! 📸: Reddit r/programmerhumor (ukjent opprinnelse) Vis mer

Hvor mye diskplass brukes når du installerer en pakke fra npm? Temmelig mye, viser det seg.

Det er nemlig ikke bare selve pakken du installerer som tar opp plass, men også eventuelle andre pakker denne er avhengig av igjen. Installerer du for eksempel Tailwind CSS med npm install tailwindcss får du også 82 andre pakker med på kjøpet – og under halvparten av diskplassen brukes av selve tailwindcss-pakken.

Selve Tailwind CSS har "bare" 22 avhengigheter, men noen av disse har igjen sine egne avhengigheter. Og så bare baller det på seg, og vi ender opp med en størrelse på 12 MB for en Tailwind-installasjon. Bare 5,5 MB av disse tilhører selve tailwindcss-pakken.

pkg-size viser deg den virkelige størrelsen

Utvikleren Hiroki Osame har laget et nyttig verktøy, pkg-size, som finner ut nøyaktig hvor mye diskplass installasjon av en npm-pakke tar.

I tillegg får du en masse detaljert informasjon om hvilke andre pakker som blir installert og størrelsen på dem, lenker til repoer, informasjon om hvorvidt pakken eksporterer TypeScript-typedefinisjoner eller ikke, om det er ESM- eller CommonJS-moduler, og så videre.

Her har vi kjørt pkg-size på UI-rammeverket Chakra-UI. Du kan drille deg ned i informasjon om de ulike pakkene.
Her har vi kjørt pkg-size på UI-rammeverket Chakra-UI. Du kan drille deg ned i informasjon om de ulike pakkene. Vis mer

Utvikleren skriver i dokumentasjonen at målet med pkg-size er å gjøre det enklere for nysgjerrige utviklere å utforske npm-økosystemet, finne nye pakker og lære mer om de som har laget dem.

De som bruker npm-pakker kan med dette verktøyet finne ut om det er skjulte avhengigheter og hvorfor de er installert, og også få hjelp til å velge mindre og optimaliserte ESM-pakker, eller sammenligne ulike pakker.

Kjører i WebContainers

Løsningen fungerer ved at du taster inn navnet på én eller flere pakker du vil installere. Pkg-size utfører da en faktisk npm-installasjon i nettleseren ved hjelp av WebContainers, et nettleserbasert Node.js-kjøremiljø fra Stackblitz.

«Alt sammen kjører altså inne i nettleseren, i et slags "mikro-operativsystem" basert på WebAssembly.»

Etter at pakkene er installert, vil pkg-size analysere node_modules-mappen for å hente ut detaljert informasjon om pakkene som har blitt installert. Deretter vil den kjøre esbuild WASM for å "bundle" alt sammen.

Alt sammen kjører altså inne i nettleseren, i et slags "mikro-operativsystem" basert på WebAssembly. Dette mikro-operativsystemet lar deg spinne opp Node.js-baserte servere i nettleseren.

Et par tips

Selv om det er interessant å vite hvor mye diskplass en npm-pakke og alle dens avhengigheter tar, så er det aller viktigste hvor mye som faktisk ender opp i det ferdige prosjektet ditt. Det finnes flere VS Code-tillegg som lar deg få vite det på en enkel måte, som for eksempel Import Cost.

Og til slutt: Hvis du vil begrense hvor mye plass node_modules tar opp på disken, anbefales å prøve pnpm i stedet for npm.

Ikke bare er pnpm mye raskere enn npm, den sørger også for at npm-pakker blir installert bare ett sted som deles mellom applikasjonene dine – i stedet for å lage én node_modules-mappe per applikasjon.