npm: podstawy, menedżer pakietów dla React Native i Node.js

Autor: IT Sectr Opublikowano: 2026-02-13 Czas czytania: 10 min

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 — standardowy menedżer pakietów Node.js, dołączany do Node.js od wersji 0.6.3
  • package.json — plik konfiguracyjny projektu z zależnościami, skryptami i metadanymi
  • npm install — podstawowe polecenie instalacji zależności z package.json do folderu node_modules
  • package-lock.json — plik blokady dokładnych wersji dla powtarzalnych instalacji we wszystkich środowiskach
  • npm ci — polecenie dla CI/CD instalujące pakiety ściśle według pliku blokady bez jego aktualizacji

Czym jest npm — menedżer pakietów Node.js?

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.

Główne możliwości npm

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.

bash
# 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

Struktura package.json i zarządzanie zależnościami

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.

json
{
  "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"
  }
}
PolePrzeznaczeniePrzykładowa wartość
scriptsPolecenia uruchamiania dla npm run"start": "node index.js"
dependenciesZależności produkcyjne aplikacji"react": "^18.3.0"
devDependenciesNarzędzia programistyczne i testowe"jest": "^29.7.0"
peerDependenciesZależności hosta dla bibliotek"react": ">=17.0.0"
enginesWymagania dotyczące wersji Node.js{"node": ">=18.0.0"}

npm w rozwoju React Native

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.

Porównanie npm z alternatywnymi menedżerami

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.

Cechanpmyarnpnpm
Rok powstania201020162017
Plik blokadypackage-lock.jsonyarn.lockpnpm-lock.yaml
InstalacjaSekwencyjna (npm 5+)RównoległaRównoległa
Miejsce na dyskuStandardoweStandardoweMinimalne (dowiązania)
WorkspacesTak (npm 7+)TakTak
Plug'n'PlayNieTakNie

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

Czym różni się npm install od npm ci?

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.

Jak naprawić konflikty peer dependencies w npm?

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.

Czym jest npm audit i do czego służy?

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.

Jak npm workspaces upraszczają monorepozytoria?

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.

Po co commitować package-lock.json do repozytorium?

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

  • npm — standardowy menedżer pakietów Node.js, dołączany do instalacji Node.js od wersji 0.6.3
  • package.json — plik konfiguracyjny projektu z zależnościami, skryptami i metadanymi
  • npm install — instalacja zależności, npm ci — blokada według package-lock.json dla CI/CD
  • package-lock.json — blokada dokładnych wersji, wymagana do powtarzalnego budowania
  • npm Registry — największy rejestr pakietów z ponad 2 milionami modułów
  • npm audit — sprawdzanie bezpieczeństwa zależności z automatycznym naprawianiem luk
  • npm workspaces — mechanizm zarządzania monorepozytoriami ze wspólnymi node_modules

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.

Omów projekt

Przeczytaj również