npm (Node Package Manager) to domyślny menedżer pakietów dla środowiska Node.js. Służy do instalowania, aktualizowania i usuwania bibliotek JavaScript oraz do zarządzania zależnościami w Twoim projekcie. Instaluje się razem z Node.js, więc gdy masz Node, masz i npm. Korzysta przy tym z rejestru npm (npm registry) — największego repozytorium otwartego kodu na świecie, w którym leżą miliony gotowych paczek.
Do czego to służy
Sednem pracy z npm jest plik package.json. To metryczka Twojego projektu: nazwa, wersja, skrypty i lista zależności. Kiedy ktoś sklonuje repozytorium i odpali npm install, npm czyta ten plik i ściąga dokładnie te biblioteki, których potrzeba — razem z ich zależnościami. Wszystko ląduje w katalogu node_modules, a dokładne wersje zapisują się w package-lock.json, żeby u Ciebie i u kolegi zainstalowało się to samo.
npm to też klient wiersza poleceń (CLI). Przez niego publikujesz własne paczki, uruchamiasz skrypty zdefiniowane w package.json (np. npm run build) i wersjonujesz projekt. Wersje pakietów trzymają się konwencji SemVer (major.minor.patch), więc zapis ^4.18.0 mówi npm: „bierz najnowszą zgodną, ale nie przeskakuj na nowy major”.
Przykład z praktyki
Zaczynasz nowy projekt. Robisz npm init -y, żeby wygenerować package.json, a potem instalujesz framework webowy:
npm install express— dodaje Express do zależności produkcyjnych,npm install --save-dev jest— dokłada Jest tylko do developmentu (testy),npx create-react-app moja-apka— uruchamia paczkę bez globalnej instalacji (npx to towarzysz npm).
Na co uważać
Kilka rzeczy, na których początkujący się przejeżdżają:
- Nie commituj
node_modulesdo gita — ten katalog potrafi ważyć setki MB i odtwarza się znpm install. Wrzuć go do.gitignore. - Commituj
package-lock.json. To on gwarantuje powtarzalność. W CI/CD używajnpm cizamiastnpm install— jest szybszy i instaluje ściśle z locka. - npm to nie jedyny gracz. Yarn i pnpm robią to samo, często szybciej i oszczędniej dyskowo, ale npm jest standardem domyślnym.
- Pilnuj bezpieczeństwa.
npm auditpokaże znane podatności w zależnościach — warto rzucić okiem, zanim coś trafi na produkcję.
Pojęcia powiązane: Node.js, package.json, node_modules, SemVer, yarn, pnpm, npx, rejestr npm.