npm (Node Package Manager) — standardowy menedżer pakietów dla platformy Node.js, dołączany do instalacji Node.js. npm zarządza zależnościami projektów JavaScript i TypeScript: instaluje biblioteki w node_modules, aktualizuje wersje pakietów, rozwiązuje konflikty wersji. package.json — centralny plik konfiguracyjny z metadanymi i listą zależności. npm Registry — największy rejestr pakietów. Więcej na npm Registry.
Najważniejsze
npm został stworzony w 2010 roku przez Isaaca Schluetera jako rozwiązanie do zarządzania zależnościami Node.js. Od 2014 roku npm jest zarządzany przez firmę npm, Inc., przejętą przez Microsoft/GitHub w 2020 roku. Narzędzie składa się z dwóch części: CLI (wiersz poleceń) do instalacji i zarządzania pakietami oraz Registry — centralnego repozytorium wszystkich opublikowanych modułów pod adresem registry.npmjs.org.
npm Registry — największy rejestr pakietów: ponad 2 miliony pakietów i ponad 10 miliardów pobrań miesięcznie. Każdy pakiet ma wersję SemVer, opis, zależności, licencję i autorstwo. Publikacja własnego pakietu odbywa się przez npm publish. npm obsługuje pakiety scoped dla organizacji (@scope/package), prywatne rejestry i wbudowany audyt bezpieczeństwa.
Node.js w wersji 18+ zawiera npm 9+ z ulepszoną wydajnością, workspaces dla monorepozytoriów i przeprojektowanym mechanizmem peer dependencies. Ekosystem npm obejmuje JavaScript po stronie serwera, frontend (React, Vue, Angular), rozwój mobilny (React Native), narzędzia do budowania (Webpack, Vite) i narzędzia CLI. npm jest głównym kanałem dystrybucji bibliotek JavaScript.
npm install — główne polecenie, które odczytuje package.json i package-lock.json w celu zainstalowania wszystkich zależności w node_modules. Przy pierwszym uruchomieniu npm oblicza graf zależności, rozwiązuje konflikty wersji i generuje package-lock.json. Polecenie npm install <package> instaluje konkretny pakiet; flaga --save-dev dodaje do devDependencies, --global — globalnie.
npx — wykonawca pakietów, dołączany do npm od wersji 5.2. npx umożliwia uruchamianie narzędzi CLI bez globalnej instalacji: npx react-native init lub npx create-react-app my-app. npx pobiera pakiet do tymczasowego cache i uruchamia, a po zakończeniu go czyści. npx jest również przydatny do uruchamiania konkretnych wersji narzędzi.
npm audit skanuje drzewo zależności w poszukiwaniu znanych luk z bazy npm. Polecenie wyświetla raport z poziomami krytyczności (critical, high, moderate) i zaleca npm audit fix do automatycznej aktualizacji podatnych pakietów. npm cache przechowuje pobrane pakiety lokalnie. npm cache clean --force czyści cache w przypadku problemów z instalacją. npm outdated pokazuje nieaktualne pakiety.
# Główne polecenia npm
$ npm install
$ npm install react-native-webview --save
$ npm install typescript --save-dev
# Uruchamianie bez globalnej instalacji
$ npx react-native init MyApp
# Audyt bezpieczeństwa
$ npm audit --fix
package.json — to plik JSON w katalogu głównym projektu, który opisuje jego metadane, zależności i konfigurację. Wymagane pola: name (unikalna nazwa pakietu) i version (wersja SemVer, np. 1.0.0). Plik jest tworzony poleceniem npm init -y do szybkiej inicjalizacji lub ręcznie.
Semantic Versioning (SemVer) — standard wersjonowania MAJOR.MINOR.PATCH. Wersja główna zmienia się przy niekompatybilnych zmianach API, poboczna — przy dodawaniu funkcjonalności (wstecznie zgodna), łatka — przy naprawianiu błędów. Symbol ^ przed wersją zezwala na aktualizacje wersji pobocznej i łatki, ~ — tylko na łatki.
{
"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"
}
}
| Pole | Przeznaczenie | Przykładowa wartość |
|---|---|---|
| scripts | Polecenia uruchamiania dla npm run | "start": "node index.js" |
| dependencies | Zależności produkcyjne aplikacji | "react": "^18.3.0" |
| devDependencies | Narzędzia programistyczne i testowe | "jest": "^29.7.0" |
| peerDependencies | Zależności hosta dla bibliotek | "react": ">=17.0.0" |
| engines | Wymagania dotyczące wersji Node.js | {"node": ">=18.0.0"} |
React Native projekty aktywnie wykorzystują npm do zarządzania zależnościami. Standardowy zestaw obejmuje react, react-native, biblioteki nawigacji (React Navigation), zapytań HTTP (axios), zarządzania stanem (Redux, Zustand) i komponenty UI. npm umożliwia instalację tysięcy kompatybilnych pakietów z rejestru.
npx pod-install — obowiązkowe polecenie po instalacji modułów natywnych w React Native dla iOS. npm automatycznie generuje Podfile.lock na podstawie package-lock.json. W projektach Expo używa się expo install zamiast npm install, ponieważ dobiera wersje kompatybilne z bieżącą wersją Expo SDK.
Konflikty wersji — częsty problem w React Native: react-native-reanimated, react-native-gesture-handler i react-native-safe-area-context wymagają zgodnych wersji. Rozwiązanie — zaktualizować wszystkie pakiety do najnowszych kompatybilnych wersji lub użyć --legacy-peer-deps. package-lock.json jest kluczowy dla modułów natywnych kompilowanych przez CocoaPods i Gradle.
npm — standardowy menedżer pakietów, dołączany do Node.js. Główne alternatywy: yarn (stworzony przez Facebook w 2016) i pnpm (szybki, z twardymi dowiązaniami). Od npm 5 różnica w szybkości i funkcjonalności między npm a yarn jest minimalna. npm 7+ dodał workspaces, co czyni go konkurencyjnym dla monorepozytoriów.
| Cecha | npm | yarn | pnpm |
|---|---|---|---|
| Rok powstania | 2010 | 2016 | 2017 |
| Plik blokady | package-lock.json | yarn.lock | pnpm-lock.yaml |
| Instalacja | Sekwencyjna (npm 5+) | Równoległa | Równoległa |
| Miejsce na dysku | Standardowe | Standardowe | Minimalne (dowiązania) |
| Workspaces | Tak (npm 7+) | Tak | Tak |
| Plug'n'Play | Nie | Tak | Nie |
Według danych State of JS 2025: npm używa 62% programistów, yarn — 35% (głównie stare projekty i fani PnP), pnpm — 3%. W przypadku projektów React Native oba narzędzia są równoważne, ale npm częściej występuje w projektach na Expo SDK 50+ i nowych inicjalizacjach React Native.
yarn zachowuje przewagę w ekstremalnie dużych monorepozytoriach (100+ pakietów) dzięki bardziej dojrzałej implementacji workspaces i Plug'n'Play. pnpm wygrywa pod względem oszczędności miejsca na dysku poprzez twarde dowiązania do globalnego magazynu. Wybór menedżera zależy od preferencji zespołu i infrastruktury.
Często zadawane pytania
npm install aktualizuje package-lock.json i może instalować nowe wersje poboczne w zakresie semantycznym. npm ci (Clean Install) usuwa node_modules i instaluje pakiety ściśle według package-lock.json bez jego aktualizacji. npm ci jest szybszy, używany w CI/CD i gwarantuje identyczne środowisko na wszystkich maszynach. Jeśli package-lock.json nie istnieje, npm ci zwraca błąd.
Od npm 7 konflikty peer dependencies powodują błąd budowania. Rozwiązania: zaktualizować wszystkie pakiety do zgodnych wersji przez npm update, użyć flagi --legacy-peer-deps dla trybu npm 6, lub dodać sekcję overrides w package.json do wymuszonego ustawienia wersji konkretnego pakietu. Najlepszym rozwiązaniem jest aktualizacja zależności do zgodnych wersji.
npm audit skanuje drzewo zależności w poszukiwaniu znanych luk z bazy npm Security Advisory. Polecenie wyświetla raport z poziomem krytyczności (critical, high, moderate, low) i zaleca npm audit fix do automatycznej aktualizacji podatnych pakietów do bezpiecznych wersji. Regularne uruchamianie npm audit to podstawowa praktyka bezpieczeństwa w projektach JavaScript.
npm workspaces umożliwiają zarządzanie wieloma pakietami w jednym repozytorium. Dodaj pole "workspaces": ["packages/*"] w głównym package.json. Zalety: wspólna instalacja wszystkich zależności w jednym node_modules, automatyczne dowiązania symboliczne między lokalnymi pakietami, uruchamianie skryptów dla wszystkich pakietów z katalogu głównego, eliminacja duplikowania wersji.
package-lock.json blokuje dokładne wersje wszystkich zależności i ich pakietów przechodnich. Bez niego różni programiści i serwery CI mogą otrzymać różne wersje bibliotek w zakresie semantycznym, co prowadzi do błędów „na mojej maszynie działa”. Commit pliku blokady gwarantuje powtarzalne budowanie i identyczne zachowanie we wszystkich środowiskach.
Podsumowanie
Opracujemy aplikację mobilną pod klucz
IT Sectr tworzy aplikacje na iOS i Androida dla startupów i firm od 2017 roku. Doradzimy Ci i zaproponujemy najlepsze rozwiązanie.
Przeczytaj również