W ostatnich tygodniach zaobserwować mogliśmy sporo zamieszania związanego z nowym narzędziem w świecie front-end’u - Yarn. Jeśli jeszcze o nim nie słyszałeś lub słyszałeś ale nie sprawdzałeś co to dokładnie jest, to dziś będziesz mógł tutaj przeczytać czym jest Yarn, do czego służy oraz dlaczego wszyscy się nim tak bardzo jarają (ja też).

Czym jest Yarn?

Może na początek po prostu w skrócie, czym jest Yarn: generalnie jest to zupełnie nowy menedżer pakietów dla JavaScript. W przeciwieństwie do NPM czyli jego głównego konkurenta, nie posiada on własnego repozytorium pakietów. Zamiast tego, może on używać innych, istniejących już repozytoriów, w tym właśnie tego, powiązanego z NPM.

No dobra, wszystko fajnie… ale po jaką cholerę ktoś postanowił stworzyć kolejny menedżer pakietów? Mało tego mamy na rynku? Jakie są główne zalety używania Yarn zamiast NPM?

Jak możemy przeczytać na oficjalnej stronie projektu, Yarn jest ultra szybki, mega bezpieczny oraz super niezawodny… Postaram się co nieco na ten temat napisać w dalszej części artykułu. Na razie jednak przeprowadźmy szybki test tego, jak Yarn działa…

Instalacja i testowe uruchomienie

Aby zainstalować Yarn w systemie macOS, możemy użyć Homebrew. Do instalacji wystarczy więc wywołać poniższe komendy w konsoli:

brew update
brew install yarn

Dodatkowo trzeba też ustawić zmienną PATH aby mieć dostęp do Yarn globalnie. Tutaj przeczytasz więcej na ten temat.

Oczywiście możesz też zainstalować Yarn na innych systemach operacyjnych. Twórczy narzędzia dostarczają nam instaler MSI dla Windows oraz pakiet apt-get dla Linuxa.

Teraz, kiedy Yarn jest już zainstalowany możemy wypróbować go w akcji. Aby to zrobić, po prostu wybierz losowo jakiś swój istniejący projekt, w którym wykorzystujesz NPM. Następnie zwyczajnie usuń katalog node_modules z głównego katalogu tego projektu. Na koniec otwórz konsolę i w głównym folderze projektu uruchom jedną z poniższych komend:

yarn

lub

yarn install

To spowoduje instalację wszystkich pakietów NPM, które znajdują się w pliku package.json. Oczywiście wylądują one standardowo w katalogu node_modules. Proste prawda?

Czyli co? To działa dokładnie tak samo jak NPM? No, nie do końca… Jestem pewien, że podczas tego testu zauważyłeś, że instalacja wszystkich tych pakietów była znacznie szybsza niż to zwykle bywa z użyciem NPM? W takim razie zobaczmy dlaczego tak jest…

Dlaczego tak szybko?

Ok, wiemy już mniej więcej czym jest Yarn. Napisałem wcześniej, że jest on ultra szybki, co zreszta sprawdziliśmy empirycznie podczas naszego prostego testu. Pare innych osób udzielających się w sieci Internet, zrobiło trochę bardziej dokładne testy. Możecie o tym przeczytać na przykład tutaj oraz tutaj.

Nie ma wątpliwości, że Yarn jest znacznie bardziej wydajny podczas instalacji pakietów. Kiedy używasz NPM, zawsze najpierw skanuje on drzewo zależności a następnie zaciąga wszystkie niezbędne pakiety. Yarn robi to w trochę inny sposób.

Najpierw sprawdza on zależności w swoim rejestrze. Następnie sprawdza on katalog globalnego cache’u i szuka w nim pobranych już wcześniej pakietów. Jeśli znajdzie w nim taką istniejącą zależność, po prostu jej użyje. W przeciwnym razie pobierze odpowiednią paczkę i zapisze ją w globalnym cache’u. Na koniec zbiera on wszystko do kupy i kopiuje wszystkie zależności z cache’u do katalogu node_modules. Aby jeszcze zwiększyć wydajność, wszystkie te operacje wykonywane są równolegle. To na pewno również wpływa na szybkość instalacji.

Zastosowanie globalnego cache’u jest znacznie szybsze niż każdorazowe pobieranie wszystkich wymaganych pakietów. Ma to jednak jeszcze jedną ważną zaletę: pozwala to na pracę w trybie offline!

Dlaczego Yarn jest mega bezpieczny i super niezawodny?

Na oficjalnej stronie Yarn możemy przeczytać (na temat bezpieczeństwa):

Yarn uses checksums to verify the integrity of every installed package before its code is executed.

Myślę, że to wiele wyjaśnia: zastosowanie sprawdzania sum kontrolnych na pewno zwiększa bezpieczeństwo, ponieważ mamy pewność, że żadne dane nie zostaną utracone podczas pobierania pakietów. Poza sumami kontrolnymi Yarn wprowadza również plik lock.yarn. Służy on do blokowania specyficznych wersji instalowanych pakietów i ich zależności. Dzięki temu każdy kto jest zaangażowany w rozwój projektu ma pewność, że posiada dokładnie te same wersje pakietów. To tyczy się również środowiska produkcyjnego - mamy pewność, że po każdym “releasie” produkcja posiada dokładnie te same wersje pakietów jakie mieliśmy zainstalowane lokalnie podczas developmentu. Jak pewnie wiecie z doświadczenia, różnie z tym bywa jeśli używa się NPM.

Podsumowanie

Mam nadzieję, że po tym krótkim artykule macie już jako takie pojęcie czym jest Yarn. Osobiście uważam, że to świetne narzędzie, które w znaczący sposób może usprawnić i przyspieszyć proces zarówno developmentu jak i deploymentu. Czy to znaczy, że NPM czeka śmierć? Nie zapędzałbym się aż tak daleko z wnioskami. Jak widzicie, Yarn to tylko menedżer pakietów. Nie posiada on własnego repozytorium. Oczywiście może on wykorzystywać wiele różnych źródeł pakietów ale na chwilę obecną NPM jest największym z nich… Myślę, że dopóki nie nastąpi jakaś rewolucja będziemy wciąż używać NPM to przechowywania pakietów. Jednak Yarn przejmie pałeczkę w ich instalowaniu. Mi tam się taka przyszłość podoba…

Źródło tytułowego obrazka: https://laravel-news.com.