Pewnemu menadżerowi pakietów w JavaScript, dokładniej npm’owi poświęciłem już jeden wpis. Omówiłem tam czym on jest, do czego służy, proces jego instalacji i podstawowe polecenia. Jeśli nie wiesz czym jest npm, to zapoznaj się z artykułem Podstawy pracy z npm – wiedza tam zawarta przyda Ci się w tym artykule. Nawet jeśli już go kiedyś przeczytałeś, to może warto sobie odświeżyć wiedzę 😉
Na samym początku myślę, że warto powiedzieć czy są menadżery pakietów. Otóż jak sama nazwa wskazuje pozwalają nam one na zarządzanie zależnościami dodawanymi do projektu. Dzięki menadżerom możemy bezproblemowo dodawać, usuwać czy aktualizować wykorzystywane pakiety. Oprócz tego pozwalają nam na definiowanie skryptów. Do najpopularniejszych menadżerów należą:
- npm – opisany przeze mnie we wpisie Podstawy pracy z npm,
- Bower – raczej należy już do reliktów przeszłości i nie warto zawracać nim sobie głowy,
- Yarn,
- pnpm
Tym razem skupimy się głównie na dwóch ostatnich pozycjach z tej listy.
Yarn
Yarn jest menadżerem pakietów stworzonym przez zespół Facebooka. Twórcy przedstawiają go jako niezwykle szybki, co w zasadzie jest prawdą. Jak pokazują badania przeprowadzone przez jednego z twórców w serwisie Medium, średni czas instalacji projektu na którym przeprowadzono benchmark wynosił dla npm 188 sekund, gdzie Yarnowi zajęło to zaledwie 39 sekund! Odpowiedź na to pytanie jest niezwykle prosta – Yarn przede wszystkim jest w stanie pobierać wiele paczek jednocześnie, gdzie npm instaluje paczki sekwencyjnie jedna po drugiej. Kolejnym argumentem przemawiającym na korzyść Yarna jest możliwość ponownego używania paczek – jeżeli mamy na naszym komputerze daną paczkę to zostanie ona użyta zamiast ponownie pobrana. Link do wspomnianego benchmarka znajdziesz w źródłach na końcu wpisu.
Oprócz tego twórcy gwarantują nam zachowanie względów bezpieczeństwa oraz niezawodność. Do tego otrzymujemy przejrzysty plik .lock
i otrzymujemy przepis na świetny menadżer pakietów! Będąc już przy temacie to zachęcam do przeczytania artykułu na snyk.io, gdzie opisane jest jak potencjalnie można by przeprowadzić atak na aplikację właśnie poprzez użycie plików .lock
.
pnpm
Kolejny menadżer pakietów jaki będzie dane nam poznać to pnpm. Tu również mamy zapewnienia o szybkości i wydajności. Czymś co wyróżnia pnpm’a jest to, że dzięki niemu mamy pewność, że dana wersja paczki została zainstalowana na naszym komputerze wyłącznie raz. Wyobraź sobie jakie to jest zbawienie dla ludzi, którzy pracują na chociażby 128GB dyskach ( tak, mam na myśli między innymi MacBooki 😉 ).
Szczególnie przydatny pnpm okaże się przy pracy z wieloma paczkami trzymanymi w jednym repozytorium. Dzięki workspace’om możemy pracować na kilku paczkach jednocześnie i bezpośrednio używać ich w innych paczkach w tym samym repozytorium. Opcja link-workspace-packages
pozwoli nam podlinkować paczki, w których coś już zmieniliśmy, a które zmiany są nam potrzebne w innej paczce. Bazując na własnym doświadczeniu mogę powiedzieć, że działa to wyśmienicie! 🙂
Podsumowanie
W podsumowaniu przede wszystkim nasuwa mi się pytanie pytanie jakiego menadżera pakietów ty używasz? Jeśli zostawisz mi odpowiedź na to pytanie w komentarzu to koniecznie również napisz dlaczego ten a nie inny menadżer.
Osobiście do małych i prostych projektów używam Yarna – jest dla mnie w zupełności wystarczający. Do bardziej skomplikowanych projektów, a już szczególnie gdy developujesz wiele paczek w obrębie jednego repozytorium to bez zastanawiania się wybierz pnpm’a!
Jak zwykle też zachęcam do zajrzenia do źródeł gdzie znajdziesz dodatkową porcję wiedzy.
Źródła i materiały dodatkowe:
- https://www.npmjs.com/package/bower
- https://yarnpkg.com/lang/en
- https://engineering.fb.com/web/yarn-a-new-package-manager-for-javascript
- https://medium.com/@j.dumadag718/yarn-vs-npm-b2d58289fb9b
- https://waverleysoftware.com/blog/yarn-vs-npm
- https://snyk.io/blog/why-npm-lockfiles-can-be-a-security-blindspot-for-injecting-malicious-modules
- https://blog.risingstack.com/yarn-vs-npm-node-js-package-managers
- https://github.com/pnpm/pnpm
- https://pnpm.js.org
- https://pnpm.js.org/en/workspaces
- https://rushjs.io/pages/maintainer/package_managers
- https://medium.com/pnpm/why-should-we-use-pnpm-75ca4bfe7d93
- https://flaviocopes.com/pnpm
Zapisz się na mailing
Zapisując się na mój mailing będziesz otrzymywać wartościowe treści powiadomienia o najnowszych wpisach na skrzynkę email.