Node.js dla początkujących - Część 12: Npm i yarn z czym to się je?

1/17/2025 Kurs JavaScript

Mateusz Kędziora

packages on a car

Menedżery pakietów to niezbędne narzędzia w nowoczesnym programowaniu JavaScript. Ułatwiają one zarządzanie zależnościami projektu, czyli bibliotekami i frameworkami, od których zależy nasz kod. Pozwalają na łatwe instalowanie, aktualizowanie i usuwanie pakietów, co znacząco przyspiesza i usprawnia proces tworzenia oprogramowania.

npm (Node Package Manager)

npm jest domyślnym menedżerem pakietów dla środowiska Node.js, instalowanym wraz z nim. Jest to największy publiczny rejestr pakietów JavaScript na świecie.

  • Historia i rola: npm powstał w 2010 roku i od tego czasu stał się standardem w ekosystemie Node.js.
  • Kluczowe funkcje:
    • Instalacja pakietów: npm install <nazwa_pakietu>
    • Zarządzanie zależnościami: Automatyczne rozwiązywanie zależności między pakietami.
    • Skrypty npm: Umożliwiają definiowanie skryptów do automatyzacji zadań, np. budowanie, testowanie, uruchamianie aplikacji.
  • package.json i package-lock.json: Plik package.json zawiera metadane projektu i listę zależności. Plik package-lock.json zapewnia spójność instalacji poprzez zapisywanie dokładnych wersji zainstalowanych pakietów i ich zależności.

Yarn

Yarn został stworzony przez Facebooka, Google, Exponent i Tidelift w 2016 roku, aby rozwiązać problemy z wydajnością i spójnością, które występowały we wcześniejszych wersjach npm.

  • Historia i motywacje: Yarn miał na celu przyspieszenie instalacji pakietów i zapewnienie bardziej deterministycznych wyników.
  • Kluczowe funkcje:
    • Instalacja pakietów: yarn add <nazwa_pakietu>
    • Zarządzanie zależnościami: Podobnie jak npm, Yarn zarządza zależnościami projektu.
    • yarn.lock: Odpowiednik package-lock.json, zapewniający spójność instalacji.
  • Yarn Workspaces (opcjonalnie): Pozwala na zarządzanie wieloma projektami (pakietami) w jednym repozytorium.

Porównanie npm i Yarn

Poniżej znajduje się szczegółowe porównanie obu menedżerów pakietów:

  • Wydajność: W przeszłości Yarn był znacznie szybszy od npm. Jednak nowsze wersje npm (od wersji 5 i późniejsze) znacząco poprawiły swoją wydajność i obecnie różnice są minimalne, a w niektórych przypadkach npm może być nawet szybszy.
  • Bezpieczeństwo: Zarówno npm, jak i Yarn stosują mechanizmy weryfikacji pakietów, ale npm oferuje dodatkowe narzędzie npm audit, które skanuje projekt w poszukiwaniu znanych luk bezpieczeństwa.
  • Spójność: Zarówno package-lock.json (npm), jak i yarn.lock (Yarn) zapewniają deterministyczne instalacje, co oznacza, że instalacja pakietów na różnych maszynach da ten sam rezultat.
  • Łatwość użycia/składnia poleceń: Składnia poleceń jest bardzo podobna, np. npm install odpowiada yarn install, a npm install <pakiet> odpowiada yarn add <pakiet>. Yarn oferuje nieco krótsze i bardziej intuicyjne komendy.
  • Obsługa trybu offline: Yarn ma wbudowaną obsługę cache, co pozwala na instalowanie pakietów offline, jeśli zostały wcześniej pobrane. npm również korzysta z cache, ale obsługa offline nie jest tak intuicyjna.

Tabela porównawcza

CechanpmYarn
DomyślnyTakNie
SzybkośćPorównywalna z Yarn w nowszych wersjachPorównywalna z npm w nowszych wersjach
Bezpieczeństwonpm auditPodstawowa weryfikacja pakietów
Spójnośćpackage-lock.jsonyarn.lock
Składnia poleceńBardziej rozbudowanaKrótsza i bardziej intuicyjna
Obsługa offlineOgraniczonaWbudowana obsługa cache

Który menedżer pakietów wybrać?

Obecnie oba menedżery są do siebie bardzo podobne pod względem funkcjonalności i wydajności. Wybór zależy od preferencji i przyzwyczajeń. Jeśli zaczynasz nowy projekt i nie masz preferencji, oba będą dobrym wyborem. Jeśli zależy Ci na dodatkowym narzędziu do audytu bezpieczeństwa, npm może być lepszym wyborem.

Podsumowanie

Zarówno npm, jak i Yarn są potężnymi narzędziami do zarządzania pakietami w JavaScript. Nowsze wersje npm dogoniły Yarna pod względem wydajności, a różnice między nimi są obecnie minimalne. Wybór między nimi jest kwestią osobistych preferencji. Ważne jest, aby korzystać z menedżera pakietów i dbać o spójność zależności w projekcie.

Dodatkowe informacje

Polecane artykuły