npm (Node Package Manager) — standardpakethanteraren för Node.js-plattformen, som ingår i Node.js-installationen. npm hanterar beroenden för JavaScript och TypeScript-projekt: installerar bibliotek i node_modules, uppdaterar paketversioner, löser versionskonflikter. package.json — den centrala konfigurationsfilen med metadata och beroendelista. npm Registry — det största paketregistret. Mer på npm Registry.
Huvudpunkter
npm skapades 2010 av Isaac Schlueter som en lösning för att hantera Node.js-beroenden. Sedan 2014 hanteras npm av företaget npm, Inc., som förvärvades av Microsoft/GitHub 2020. Verktyget består av två delar: CLI (kommandorad) för installation och hantering av paket, och Registry — det centrala arkivet för alla publicerade moduler på registry.npmjs.org.
npm Registry — det största paketregistret: över 2 miljoner paket och över 10 miljarder nedladdningar månatligen. Varje paket har en SemVer-version, beskrivning, beroenden, licens och upphovsrätt. Publicering av ett eget paket sker via npm publish. npm stöder scoped-paket för organisationer (@scope/package), privata register och inbyggd säkerhetsgranskning.
Node.js version 18+ innehåller npm 9+ med förbättrad prestanda, workspaces för monorepon och en omarbetad peer dependencies-mekanism. npm-ekosystemet omfattar server-side JavaScript, frontend (React, Vue, Angular), mobilutveckling (React Native), byggverktyg (Webpack, Vite) och CLI-verktyg. npm är den huvudsakliga distributionskanalen för JavaScript-bibliotek.
npm install — huvudkommandot som läser package.json och package-lock.json för att installera alla beroenden i node_modules. Vid första körningen beräknar npm beroendegrafen, löser versionskonflikter och genererar package-lock.json. Kommandot npm install <package> installerar ett specifikt paket; flaggan --save-dev lägger till i devDependencies, --global — globalt.
npx — paketutförare, som ingår i npm sedan version 5.2. npx gör det möjligt att köra CLI-verktyg utan global installation: npx react-native init eller npx create-react-app my-app. npx laddar ner paketet till en tillfällig cache, kör det och rensar upp efteråt. npx är också användbart för att köra specifika versioner av verktyg.
npm audit skannar beroendeträdet efter kända sårbarheter från npm-databasen. Kommandot visar en rapport med allvarlighetsnivåer (critical, high, moderate) och rekommenderar npm audit fix för automatisk uppdatering av sårbara paket. npm cache lagrar nedladdade paket lokalt. npm cache clean --force rensar cachen vid installationsproblem. npm outdated visar föråldrade paket.
# Huvudkommandon för npm
$ npm install
$ npm install react-native-webview --save
$ npm install typescript --save-dev
# Körning utan global installation
$ npx react-native init MyApp
# Säkerhetsgranskning
$ npm audit --fix
package.json — är en JSON-fil i projektroten som beskriver dess metadata, beroenden och konfiguration. Obligatoriska fält: name (unikt paketnamn) och version (SemVer-version, t.ex. 1.0.0). Filen skapas med kommandot npm init -y för snabb initiering eller manuellt.
Semantic Versioning (SemVer) — versionsstandarden MAJOR.MINOR.PATCH. Huvudversionen ändras vid inkompatibla API-ändringar, mindre version — vid tillägg av funktionalitet (bakåtkompatibel), patch — vid buggfixar. Symbolen ^ före versionen tillåter uppdatering av mindre version och patch, ~ endast patch.
{
"name": "my-app",
"version": "1.0.0",
"private": true,
"scripts": {
"start": "expo start",
"android": "expo start --android",
"ios": "expo start --ios"
},
"dependencies": {
"react": "^18.3.0",
"react-native": "^0.76.0"
},
"devDependencies": {
"typescript": "^5.5.0",
"@types/react": "^18.3.0"
}
}
| Fält | Syfte | Exempelvärde |
|---|---|---|
| scripts | Körkommandon för npm run | "start": "node index.js" |
| dependencies | Produktionsberoenden för applikationen | "react": "^18.3.0" |
| devDependencies | Utvecklings- och testverktyg | "jest": "^29.7.0" |
| peerDependencies | Värdberoenden för bibliotek | "react": ">=17.0.0" |
| engines | Node.js-versionkrav | {"node": ">=18.0.0"} |
React Native projekt använder aktivt npm för beroendehantering. Standardsatsen inkluderar react, react-native, navigationsbibliotek (React Navigation), HTTP-förfrågningar (axios), tillståndshantering (Redux, Zustand) och UI-komponenter. npm gör det möjligt att installera tusentals kompatibla paket från registret.
npx pod-install — obligatoriskt kommando efter installation av inbyggda moduler i React Native för iOS. npm genererar automatiskt Podfile.lock baserat på package-lock.json. I Expo-projekt används expo install istället för npm install, eftersom det väljer versioner som är kompatibla med aktuell Expo SDK-version.
Versionskonflikter — ett vanligt problem i React Native: react-native-reanimated, react-native-gesture-handler och react-native-safe-area-context kräver samordnade versioner. Lösning — uppdatera alla paket till senaste kompatibla versioner eller använd --legacy-peer-deps. package-lock.json är avgörande för inbyggda moduler som kompileras via CocoaPods och Gradle.
npm — standardpakethanteraren som ingår i Node.js. Huvudalternativ: yarn (skapat av Facebook 2016) och pnpm (snabb, med hårda länkar). Från npm 5 är skillnaden i hastighet och funktionalitet mellan npm och yarn minimal. npm 7+ lade till workspaces, vilket gör det konkurrenskraftigt för monorepon.
| Egenskap | npm | yarn | pnpm |
|---|---|---|---|
| Skapelseår | 2010 | 2016 | 2017 |
| Låsfil | package-lock.json | yarn.lock | pnpm-lock.yaml |
| Installation | Sekventiell (npm 5+) | Parallell | Parallell |
| Diskutrymme | Standard | Standard | Minimalt (länkar) |
| Workspaces | Ja (npm 7+) | Ja | Ja |
| Plug'n'Play | Nej | Ja | Nej |
Enligt State of JS 2025: npm används av 62% av utvecklarna, yarn — 35% (främst gamla projekt och PnP-entusiaster), pnpm — 3%. För React Native-projekt är båda verktygen likvärdiga, men npm förekommer oftare i projekt på Expo SDK 50+ och nya React Native-initieringar.
yarn behåller sin fördel i extremt stora monorepon (100+ paket) tack vare en mer mogen implementering av workspaces och Plug'n'Play. pnpm vinner i diskutrymmesbesparing genom hårda länkar till ett globalt lager. Valet av hanterare beror på teamets preferenser och infrastruktur.
Vanliga frågor
npm install uppdaterar package-lock.json och kan installera nya mindre versioner inom semantiskt intervall. npm ci (Clean Install) tar bort node_modules och installerar paket strikt enligt package-lock.json utan att uppdatera det. npm ci är snabbare, används i CI/CD och garanterar identisk miljö på alla maskiner. Om package-lock.json saknas returnerar npm ci ett fel.
Från npm 7 orsakar peer dependencies-konflikter byggfel. Lösningar: uppdatera alla paket till kompatibla versioner via npm update, använd flaggan --legacy-peer-deps för npm 6-läge, eller lägg till en overrides-sektion i package.json för att tvinga låsning av ett specifikt pakets version. Bästa alternativet — uppdatera beroenden till kompatibla versioner.
npm audit skannar beroendeträdet efter kända sårbarheter från npm Security Advisory-databasen. Kommandot visar en rapport med allvarlighetsnivå (critical, high, moderate, low) och rekommenderar npm audit fix för automatisk uppdatering av sårbara paket till säkra versioner. Regelbunden körning av npm audit — en grundläggande säkerhetspraxis i JavaScript-projekt.
npm workspaces gör det möjligt att hantera flera paket i ett enda arkiv. Lägg till fältet "workspaces": ["packages/*"] i rotens package.json. Fördelar: enhetlig installation av alla beroenden i en delad node_modules, automatiska symboliska länkar mellan lokala paket, körning av skript för alla paket från roten, eliminering av versionsduplicering.
package-lock.json låser exakta versioner av alla beroenden och deras transitiva paket. Utan det kan olika utvecklare och CI-servrar få olika biblioteksversioner inom semantiskt intervall, vilket leder till fel av typen „det fungerar på min maskin“. Commit av låsfilen garanterar repeterbara byggen och identiskt beteende i alla miljöer.
Sammanfattning
Vi utvecklar en mobil applikation nyckelfärdigt
IT Sectr skapar iOS- och Android-applikationer för startups och företag sedan 2017. Vi ger dig råd och föreslår den bästa lösningen.
Läs också