w nowoczesnym tworzeniu aplikacji nie piszemy wszystkiego od zera. Zamiast tego wolimy używać istniejących pakietów open-source. Każdy z tych pakietów ma swoich opiekunów i społeczność. Tak więc używanie pakietu w naszych projektach daje nam pewne korzyści, takie jak szybszy rozwój, dostęp do nowych, regularnych aktualizacji i lepsze bezpieczeństwo niż Niestandardowy skrypt.
często zdarza się, że jeden pakiet zależy od wielu innych pakietów, które działają poprawnie. Podobnie lodash lodash może również zależeć od innych pakietów, ale samo lodash również zależy od kilku pakietów. Innymi słowy, zagnieżdżone zależności mogą czasami stać się tak złożone, że nie są w stanie ręcznie zarządzać zależnościami.
oto, kiedy menedżer pakietów jest niezwykle przydatny. Menedżery pakietów to narzędzia, które automatycznie obsługują zależności projektu.
na przykład menedżer pakietów może instalować nowe lub aktualizować istniejące pakiety za pomocą jednego polecenia. Ponieważ wszystko jest zautomatyzowane, więc nie ma szans na ludzki błąd. Jako programiści JavaScript mamy dostęp do kilku menedżerów pakietów. Ale w tym przewodniku porównamy trzy najpopularniejsze:
- npm
- Yarn
- pnpm
- przegląd menedżerów pakietów
- funkcje npm, Yarn i pnpm
- zalety npm:
- zalety Yarn:
- korzyści z pnpm:
- porównanie menedżera pakietów
- łatwość użycia
- szybkość
- bezpieczeństwo
- stabilność
- wsparcie dla monorepos
- deterministyczny — plik blokady
- podsumowanie
- LogRocket: łatwiejsze debugowanie błędów JavaScript poprzez zrozumienie kontekstu
przegląd menedżerów pakietów
npm był pierwszym menedżerem pakietów, który wprowadził koncepcje protokołu rejestru i standardów pakowania. Został wydany w 2010 roku i oficjalnie przyjęty przez Node.js team wkrótce potem, co było punktem zwrotnym dla npm.
Po ogromnym sukcesie Node.js, npm również zyskały poparcie społeczności deweloperów. Oferuje rejestr online dla pakietów JavaScript, a także narzędzie wiersza poleceń, które współpracuje z rejestrem w celu instalowania i aktualizowania zależności.
ale jest kilka wad npm, które spowodowały rozwój przędzy i pnpm. Na przykład npm jest znacznie wolniejszy niż jego odpowiedniki. Ma również historię poważnych luk w zabezpieczeniach.
Wielkie firmy technologiczne, takie jak Facebook i Google, wahały się, czy nadal korzystać z npm. Z kolei połączyli wysiłki w celu opracowania lepszej wersji npm i nazwali ją Yarn. W międzyczasie Ukraiński deweloper Zoltan Kochan opracował pnpm.
funkcje npm, Yarn i pnpm
wszystkie te Menedżery pakietów są open-source, co oznacza, że masz pełny dostęp do sprawdzenia wewnętrznego działania każdego z nich. Czasami jest to nawet wymóg w tworzeniu aplikacji na poziomie przedsiębiorstwa.
zalety npm:
- automatycznie generuje plik
package-lock.json
. Przydatne jest zatwierdzenie systemu kontroli wersji. W ten sposób inni programiści mogą łatwo zainstalować zależności na swoich lokalnych maszynach - łatwo Zarządzaj lokalnymi lub globalnymi zależnościami
- npm jest dobrze wyposażony do obsługi wielu wersji zależności
- posiada oficjalny rejestr, który ma więcej pakietów niż pypi, rubygems lub packagist
zalety Yarn:
- Yarn rozwiązuje wiele problemów pojawiających się w Monorepo. Na przykład, jeśli utrzymujesz wiele pakietów w tym samym repozytorium i wszystkie mają oddzielny plik
package.json
, możesz łatwo zaktualizować wszystkie pakiety za pomocą Yarn, dzięki koncepcji obszarów roboczych, które mogą instalować zależności wszystkich pakietów w repozytorium, wszystko za jednym razem. W przypadku npm musisz ręcznie uruchomić polecenienpm install
w każdym folderze pakietu. - Yarn korzysta z mechanizmu offline cache, co oznacza, że po zainstalowaniu pakietu po raz pierwszy, Yarn dodaje go do folderu cache pod
~/.yarn-cache
. Następnym razem, gdy będziesz potrzebował tego pakietu, Yarn pobierze go z lokalnej pamięci podręcznej, zamiast wysyłać żądanie HTTP do serwera. To niewielkie ulepszenie znacznie zwiększa wydajność Yarn w porównaniu do npm - Yarn wykorzystuje również plik blokady o nazwie
yarn.lock
, więc twoje projekty będą działać poprawnie dla wszystkich członków zespołu. Koncepcja ta jest również określana jako deterministyczny algorytm instalacji - jest wyposażona we wbudowany kontroler licencji, który może być przydatny w różnych scenariuszach podczas tworzenia aplikacji
- w przeciwieństwie do npm, Yarn używa podejścia zwanego równoległym pobieraniem. Umożliwia wykorzystanie większej ilości zasobów w celu przyspieszenia procesu kompilacji
- może automatycznie ponowić żądanie HTTP w przypadku awarii. Ta funkcja jest szczególnie przydatna, gdy masz do czynienia z tymczasowymi problemami z Internetem
korzyści z pnpm:
- jest kompatybilny z npm, ale oferuje również znacznie lepsze wykorzystanie miejsca na dysku i szybkość
- pnpm instaluje wszystkie pakiety w jednej lokalizacji, a następnie używa dowiązań symbolicznych do odwoływania się do nich. Wprowadza zupełnie nową koncepcję o nazwie content-addressable storage system, który umożliwia pnpm wykrycie różnicy między plikami. Z kolei nie duplikuje niezmienionych plików w dwóch różnych wersjach pakietu
- jego najnowszej wersji, 5.8.0, wprowadza nowe ustawienie podobne do yarn-bash o nazwie Shell-emulator, wieloplatformowe środowisko powłoki
- pnpm ma ścisły mechanizm kontroli dostępu, co oznacza, że pakiet może uzyskać dostęp tylko do zależności zdefiniowanych w jego
package.json
plik
porównanie menedżera pakietów
łatwość użycia
npm, Yarn i pnpm oferują prawie identyczne polecenia dla swoich różnych operacji i wszystkie są łatwe w użyciu. Oto przykład ich powszechnie używanych poleceń:
npm | npm | pnpm |
---|---|---|
npm install | yarn install | pnpm install |
aktualizacja npm | aktualizacja przędzy | aktualizacja pnpm |
szybkość
nie ma zgodności z pnpm, jeśli chodzi o szybkość i wydajność tych menedżerów pakietów. Zgodnie z benchmarkiem różnych przypadków użycia, pnpm wykazał wydajność do 3 razy szybszą niż npm.
prędkości przędzy i npm są porównywalne. W niektórych przypadkach przędza ma znaczną przewagę nad npm, ale istnieją scenariusze, w których npm jest bardziej odpowiednim wyborem. Na przykład, jeśli wykonamy operację instalacji za pomocą node_modules
I pominiemy cache
I lock file
, to npm może zaoferować 5x lepszą prędkość. Podobnie, jeśli użyjemy wszystkich trzech funkcjonalności, wtedy Yarn może zwiększyć swoją wydajność i stać się 11x szybciej niż npm.
bezpieczeństwo
główną zaletą Yarn nad npm jest to, że weryfikuje integralność każdego pakietu za pomocą sum kontrolnych. Proces weryfikacji odbywa się przed wykonaniem kodu z pakietu, więc eliminuje wszelkie szanse na lukę w zabezpieczeniach związanych z przejęciem pakietu.
z drugiej strony, npm jest nieco bardziej wyrozumiały, jeśli chodzi o pracę ze złymi pakietami. Wciąż się rozwija, aby oferować najlepsze praktyki w zakresie bezpieczeństwa. Ale npm ogólnie ma złą reputację pod względem bezpieczeństwa.
w przeszłości istniały pewne luki w zabezpieczeniach w npm, które bezpośrednio wpłynęły na wiele projektów. Na przykład w wersji 5.7.0 npm, gdy wykonujesz polecenie sudo npm
na systemie operacyjnym opartym na Linuksie, istniała możliwość zmiany własności plików systemowych, czyniąc system bezużytecznym.
podobnie, kolejny incydent kradzieży bitcoinów miał miejsce w 2018 roku. Zasadniczo popularny węzeł.Pakiet js EventStream dodał szkodliwą zależność flatmap-stream
w wersji 3.3.6. Ten złośliwy pakiet został zapakowany w zaszyfrowany ładunek, który próbuje ukraść bitcoiny z maszyny dewelopera.
pnpm łączy pozytywne cechy zarówno npm, jak i Yarn, aby zapewnić jeszcze lepsze bezpieczeństwo. Implementuje również mechanizm ścisłej kontroli dostępu, który wiąże pakiet wyłącznie z własnymi zależnościami, które są zdefiniowane w jego pliku .
stabilność
npm, Yarn i pnpm przeszły przez kilka faz w ciągu ostatnich kilku lat. Z biegiem czasu ich baza kodu Dojrzała, ponieważ otrzymali mnóstwo wkładów od społeczności open-source.
i wraz z upływem czasu pojawiają się nowe koncepcje i pomysły, które mogą wprowadzić przełomowe zmiany. W momencie pisania tego przewodnika, wszystkie te Menedżery pakietów są w dobrej kondycji i można ich używać w swoich projektach bez żadnych problemów.
jest wspierany przez Facebook i Google, npm jest wspierany przez Microsoft i Node.JS i pnpm są w większości rozwijane przez osobę fizyczną, chociaż obecnie ma ponad 75 współpracowników – więc możesz polegać na tych menedżerach pakietów, aby utworzyć następny projekt.
wsparcie dla monorepos
Monorepos są najczęściej preferowane przez duże firmy technologiczne do przechowywania i zarządzania ich ogromnymi bazami kodów. npm został zaprojektowany tylko do zarządzania poszczególnymi projektami. Jak na razie nie ma żadnych funkcji do obsługi monorepos. Ale zarówno Yarn, jak i pnpm mają pełne wsparcie dla monorepos, dzięki swojej koncepcji przestrzeni roboczych.
deterministyczny — plik blokady
wszystkie trzy Menedżery pakietów są spakowane z funkcjonalnością pliku blokady. Pozwala różnym programistom zainstalować dokładnie tę samą kopię projektu. npm używa plikupackage-lock.json
, Yarn używayarn.lock
, a pnpm używapnpm-lock.yaml
.
podsumowanie
Jeśli szukasz rozwiązania, które zapewni Ci lepszą szybkość i efektywne wykorzystanie pamięci, zdecydowanie powinieneś rozważyć użycie pnpm.
Jeśli obsługujesz monorepos, możesz użyć pnpm lub Yarn, aby to zrobić. Należy jednak pamiętać, że Yarn wysyła dane o użytkowaniu do Facebooka, co może nie sprawić, że Yarn będzie odpowiednim wyborem w niektórych scenariuszach.
również nie obsługuje wersji 5 Node.js. Pod tym względem npm jest preferowaną opcją dla węzła.projekty oparte na js, ponieważ jest to zalecane przez węzeł.js team. W dzisiejszych czasach, Node.js jest domyślnie wyposażony w npm.
W przypadku npm należy rozważyć jego historię z kwestiami bezpieczeństwa, co zapoczątkowało rozwój Yarn, który powstał również w celu rozwiązania wielu emitentów, którzy byli obecni w npm. Tak więc, jeśli martwisz się o bezpieczeństwo swoich projektów, rozważ użycie Yarn zamiast npm.
LogRocket: łatwiejsze debugowanie błędów JavaScript poprzez zrozumienie kontekstu
debugowanie kodu jest zawsze żmudnym zadaniem. Ale im bardziej rozumiesz swoje błędy, tym łatwiej je naprawić.
LogRocket pozwala zrozumieć te błędy w nowy i unikalny sposób. Nasze rozwiązanie do monitorowania frontend śledzi zaangażowanie użytkowników w interfejsy JavaScript, aby dać Ci możliwość sprawdzenia, co dokładnie zrobił użytkownik, który doprowadził do błędu.
LogRocket rejestruje dzienniki konsoli, czasy ładowania strony, stosy, powolne żądania / odpowiedzi sieciowe z nagłówkami + korpusy, metadane przeglądarki i niestandardowe dzienniki. Zrozumienie wpływu kodu JavaScript nigdy nie będzie łatwiejsze!
Wypróbuj za darmo.