w Praktyce
6 godz. 51 min · ReactJS · Full-stack i Programowanie
Adam RomanskiFrontend developer & YouTube CreatorNarzędzia typu ESlint, Prettier, Husky czy lint-staged niezmiernie pomagają nam w pracy. Problem jednak polega na tym, że ich konfiguracja bywa kłopotliwa. W tym kursie dowiesz się, jak poprawnie skonfigurować te narzędzia, tak, aby nie wchodziły ze sobą w konflikty i pomagały nam pisać lepszy kod.
Brzmi jak zły pomysł? Wcale nie! CSS in JS to rewolucyjne podejście, które pozwala nam tworzyć style bezpośrednio w komponentach. Dzięki bibliotece Styled Components możesz wpływać na ich stan, wygląd i wiele innych rzeczy. To niezwykłe narzędzie, wprowadzające powiew świeżości dla ludzi zmęczonych czystym CSS.
Dokumentowanie wyglądu i zachowania naszych komponentów bywa kłopotliwe. Jeśli jednak użyjemy odpowiednich narzędzi, staje się banalne! Storybook w połączeniu z podejściem atomic design pozwoli nam na stworzenie świetnie udokumentowanych komponentów.
React w Praktyce nie byłby... praktyczny, gdyby nie pokazanie tego, w jaki sposób rozwiązuje się problemy z layoutem aplikacji. Sidebary, szablony, powtarzalne komponenty – to wszystko poznasz w tym kursie.
Tworzenie store, czyli warstwy z danymi w naszej aplikacji dla wielu bywa wyzwaniem dość trudnym. Wynika to często z tego, że przykłady Reduxa bywają niepraktyczne. W tym kursie dowiesz się, w jaki sposób działa Redux – zaczniemy od podstaw, a skończymy na rozbudowanej strukturze danych. Dzięki temu zobaczysz, że nie taki Redux straszny jak go malują.
Aplikacja frontendowa bez backendu może istnieć, choć jej możliwości będą zdecydowanie ograniczone. A już na pewno będzie ona miała kiepską pamięć. Dlatego w tym kursie stworzymy lokalną wersję backendu połączoną z MongoDB na mLab. W ten sposób będziemy mogli dłużej przechowywać dane zapisane w naszych komponentach.
O testach można mówić wiele. To niezwykle rozległy temat, dlatego zanim zaczniesz je pisać na poważnie, chcę Ci pokazać jak możesz poćwiczyć podstawowe rzeczy. Poznasz narzędzie JEST, które odpowiada za uruchamianie testów, oraz wprowadzę Cię do react-testing-library, jednej z najpopularniejszych bibliotek do testowania aplikacji reactowych.
Ten kurs przeznaczony jest dla osób, które lada dzień będą aplikować na stanowiska juniorskie jako React developer. Zawarłem w nim wiele aspektów pracy z React, które zdarzają się w prawdziwej pracy. Ponadto skorzystać mogą z niego osoby, które znają inny framework JS i chcą nauczyć się Reacta, jednak kursy od podstaw są dla nich zbyt proste.
16.8.x
Cześć, w poprzedniej lekcji udało nam się skonfigurować prettier'a a jeszcze wcześniej ESlinta,
a to wszystko po to, żeby zagwarantować, że nasz kod będzie jak najlepiej
uporządkowany, że nie pojawi się w nim żaden nieproszony błąd,
a przynajmniej taki, który wychwyci jedno albo drugie narzędzie. Jeszcze
teraz zanim przejdziemy do dalszej części naszego kursu, musimy
zrobić jedną bardzo ważną rzecz. Jak widzisz, ja na dole tutaj mam terminal
i mam różne branch'e commit'uje ten cały ten kod w zależności od lekcji,
w której się znajdujemy, zakładam, że ty również własny kod będziesz commit'ować
gdzieś, zakładam, że masz własne repozytorium i na przykład wypchniesz te zmiany
później github'a, na bitbucked czy gdziekolwiek indziej i rzeczy,
której chcemy na pewno uniknąć to przypadkowe zacommit'owanie błędnego kodu, czyli
takiego którego w jakiś sposób ESlint albo prettier nie wychwycił i
nie naprawiły w locie, więc żeby tego uniknąć, dodamy
jeszcze dwa narzędzia nazywają się husky i lint-staged i dzięki
nim będziemy mieć taką pewność, że zanim zrobimy jakikolwiek commit,
uruchomi się tak zwany hook, który sprawdzi czy nasz kod, aby
na pewno nie zawiera żadnych dziwnych błędów, więc teraz
do naszego projektu dodamy sobie dwie paczki. Zainstalujemy
je tutaj npm install, jak zwykle są to paczki dla deweloperów, czyli flaga
D husky, jak ktoś lubi psy to łatwo zapamięta i lint-staged,
czekam aż się zainstaluje, a tym
czasie możemy sobie odpalić dokumentację husky'ego i przeciwieństwie
do poprzednich pluginów, które dodawaliśmy konfiguracja husky'ego jest naprawdę
bajecznie prosta, jedyne co musimy zrobić to w naszym package json dodać
pole husky, to sobie skopiujemy, odpaliłem
package json, gdzieś tutaj na dole husky, jak
widzisz husky oferuje tak zwane hooks'y, mamy różne rodzaje tych
hooks'ów, całą listę znajdziesz oczywiście w dokumentacji, natomiast
my potrzebujemy tylko jednego, jest precommit, czyli coś
co dzieje się przed za commit'owaniem kodu, czyli zanim zacommit'ujemy kod,
odpali się husky. Sprawdzi czy wszystko jest okej, jak
nie jest okej, to commit się nie wykona, pokaże nam jakie mamy błędy i dopiero
jak je naprawimy to pozwoli nam wykonać commit i to co my chcemy zrobić
to wykonać komendę lint-staged i
do tego właśnie będzie nam potrzebna ta druga paczka. Teraz
wpiszemy sobie lint-staged, jak
sobie zjedziemy tutaj na dół, to zobaczymy, że mamy nawet takie gotowe przepisy
na to co możemy zrobić w lint-staged, o tutaj
mamy na przykład z husky, czyli mamy husky hooks
pre-commit, tutaj mamy lint-staged, czyli teraz możemy sobie tutaj dodać
i tutaj wpiszemy
lint-staged, kluczem tego obiektu jest rodzaj
plików, na których będziemy operować i w naszym przypadku będą to wszystkie pliki JavaScript
gwiazdka oznacza wszystkie nazwy i oczywiście kropka
JS to jest rozszerzenie dla plików JavaScript i następnie tutaj w tej
tablicy, po kolei podajemy wszystkie procedury, które mają się wykonać i uwaga one
się wykonują w takiej kolejności w jakiej napiszemy, pierwsza jaką chcemy
wykonać prettier z flagą write. Dodatkowo
chcemy jeszcze podać konfigurację, która
znajduje się w pliku plik prettierrc, następnie
wykonamy ESlint z flagą fix, czyli ESlint spróbuje naprawić
wszystkie błędy, które się pojawiły, a następnie robimy git add. Dlaczego
gitadd? No bo procedura jest taka, najpierw dodajemy nasz kod, czyli
robimy git add, później robimy git commit, nazywamy commit, później
odpala się to. Nasze
narzędzia jeśli zdołają, to naprawiają nasz kot przez prettier'a, naprawiają nasz
kod przez fix'a i następnie ten zmieniony kod
musi zostać dodany, więc jeśli wszystko poszło dobrze, jeśli
udało się automatycznie naprawić te błędy to to musi dojść
do dodania tego dostaje w naszym repozytorium, czyli
do tego commit'a, który stworzyliśmy ten kod na nowo musi zostać dodany, żeby
zmiany poczynione przez nasze pluginy zostały uwzględnione i wtedy dopiero dochodzi
do commit'a. Jeśli natomiast były jakieś błędy to husky nas stopuje
i nic nam się nie uda, musimy poprawić nasze błędy, a dopiero później wykonać
commit. Z taką konfiguracją możemy teraz przetestować czy to
wszystko działa, próbujemy zepsuć nasz plik app js,
z powrotem stworzyłem klasę
zamiast czystej funkcji, jest to błąd w ESlint'cie, którego
sam ESlink na pewno nie naprawi, więc to co się wydarzy to ESlint
powinien wrzucić błędem podczas wykonywania tej komendy lint-staged. Uwaga,
więc dodaje wszystkie zmiany i teraz ja
już dodałem sobie commit 01.5-finish, to jest commit,
który mam dodać na tym branczu, więc ja kolejnego commit'a nie będę dodawał
tylko zrobię amenda natomiast u ciebie prawdopodobnie będzie to wyglądać tak, że
to będzie git commit z jakąś tam wiadomością. W moim
przypadku będzie to git commit amend no
edit, to znaczy, że zmiany, które teraz robimy, dodajemy
do ostatniego commit'a, a nie tworzymy nowego commit'a i nie
dodaję żadnego nowego komunikatu do treści tego commit'a i
teraz uwaga, ciekawe czy husky się wywali,
okej, przeanalizujmy co się wydarzyło
i jak widzisz husky się uruchomił następnie
przeszedł do wykonywania procedury uruchomił prettier'a, prettier ogarnął
wszystko, zobaczył że wszystko jest w porządku. Później przyszedł ESlint, zobaczył
że nie może czegoś naprawić rzucił nam błędem, mówi w jakim
pliku jest błąd i że mamy go sobie sami naprawić, więc
teraz sami go naprawimy, ale za to zepsujemy coś innego,
coś co prettier sam powinien ogarnąć. Okej,
dodajemy nasze zmiany i ja robię dokładnie to samo git commit amend no
edit. Uwaga,
tym razem
wszystko poszło tak jak trzeba commit został dodany, natomiast
jak widzisz nasz plik również został naprawiony, nie ma żadnych błędów, ale
w naszej konfiguracji w naszych plikach istnieje jeszcze jeden mały problem, o którym wcześniej
nie wspominałem i jedną rzecz musimy dodać do konfiguracji ESlinta, mianowicie
chodzi o to, że ESlint i prettier w tych hooks'ach, które skonfigurowaliśmy w package json
sprawdzają wyłącznie te pliki, które dodajemy do commit'a, które zostały zmienione, a przecież
nie wszystkie pliki, które dodawaliśmy do commit'a były zmieniane, na
przykład index js albo app test js i jak widzisz ESlint się
czepia tego, że document is not defined, a przecież document to jest po prostu część
DOM'u i musimy się do tego w jakiś sposób odwołać i przez to, że używamy
czegoś takie jak document albo używamy czegoś takiego it to w sensie
musimy powiedzieć słuchaj ESlint, my będziemy korzystać z określonego środowiska
i musisz pewne rzeczy po prostu tolerować. Dlatego teraz wejdź mi sobie do ESlinta
i mamy takie dwie rzeczy, które musimy ustawić, pierwsze to środowisko, w
którym pracujemy i tutaj przez środowisko mam na myśli środowisko testowe, które
używamy, jest to gest i musimy powiedzieć, że tak
że z jest'a skorzystamy i wtedy on przestanie się czepiać tego it, które
należy właśnie do jest'a. Widzisz, że ten błąd już zniknął, a drugą
rzeczą, którą musimy ustawić to takie zmienne globalne, do których będziemy się
odwoływać i ESlint prostu musi po prostu wiedzieć co z nimi robić, więc tutaj ustawimy
sobie globales i powiemy, że document to jest
zmienna, którą on po prostu ma przepuszczać, ma ją tolerować i teraz sprawdźmy
czy to zadziałało, odpalimy sobie ESlint'a po prostu
z poziomu naszego terminala. Uwzględnimy wszystkie pliki js i faktycznie
żadnego błędu nie ma. Natomiast jeśli usuniemy to co pisaliśmy przed chwilą to
zobaczymy, że mamy błędy właśnie dotyczące jest'a i document'u, więc
przywracamy te zmiany i w ten sposób nasze ESlint
przestanie się czepiać tych zmiennych i środowiska, którego będziemy
używać, więc nasza konfiguracja dobiegła końca. Mamy
całkiem fajnie ustawiony projekt, kod jest automatycznie formatowany,
naprawiany, także wszystko idzie po naszej myśli, a w następnej
lekcji już zaczynamy konfigurację nowych narzędzi, ale związanych
już typowo z development'em i obiecuję ci, że będzie to mega ekscytująca przygoda. Do
zobaczenia w następnej lekcji.