Przegląd i Konfiguracje narzędzi
3 godz. 49 min · JavaScript · Full-stack i Programowanie
Adam GospodarczykAktualnie trudno wyobrazić sobie pracę w ekosystemie JavaScriptu bez terminala. W pierwszym rozdziale kursu nie tylko dowiesz się o dostępnych na rynku narzędziach oraz rozszerzeniach ale także o sposobach ich konfiguracji, uwzględniających przykłady z codziennej pracy, w tym wykorzystanie GPT-3 do łatwiejszej obsługi terminala.
Dla osób, które programują, IDE (Integrated Development Environment) niemal zawsze stanowi najważniejsze narzędzie pracy. Pomimo tego, że na rynku dostępny jest bardzo dobry Visual Studio Code, w tym kursie poznasz bliżej płatne narzędzia firmy JetBrains, które w wielu przypadkach sprawdzą się nieporównywalnie lepiej. Dobrze skonfigurowane IDE potrafi "zrozumieć" Twój kod na tyle, aby skutecznie Ci pomagać w pisaniu kodu, pracy zespołowej czy debugowaniu aplikacji.
Poza narzędziami bezpośrednio związanymi z programowaniem, istnieje szereg aplikacji które pomagają w codziennej pracy. Mowa o pracy koncepcyjnej, sandboxach, organizacji wiedzy, zadań, kalendarza, poczty czy nawet sięganie po narzędzia no-code / low-code. W tym kursie znajdziesz przegląd tych, które mają duży sens z punktu widzenia full-stack'a, aczkolwiek pamiętaj że każde z nich posiada też różne alternatywy, które mogą bardziej przypaść Ci do gustu.
Kolejnym niezbędnym elementem w programowaniu, są różnego rodzaju zależności projektu oraz narzędzia instalowane na komputerze czy serwerach, w celu ułatwienia pracy lub wręcz jej umożliwienia. Poza tym poruszymy też temat własnych skryptów a nawet tworzenia CLI w Node.js na własne potrzeby.
Tworzenie aplikacji w JS charakteryzuje konieczność wykorzystywania różnego rodzaju narzędzi, umożliwiających m.in. transpilowanie oraz optymalizację kodu. Obecnie jednym z najlepszych wyborów jest Vite i to na nim skupimy się najbardziej, łącząc go nie tylko z samym JavaScriptem ale także frameworkami CSS (konkretnie Tailwind CSS).
Ten kurs powstał z myślą o osobach pracujących w ekosystemie JavaScriptu. Jest to szybkie przegląd dostępnych na rynku narzędzi oraz przykładów ich praktycznego wykorzystania w codziennej pracy. Jeżeli szukasz inspiracji, nowych narzędzi lub sposobów usprawnienia codziennych zadań — w tym kursie je znajdziesz.
Kolejnym ważnym elementem naszego workflow
jest wykorzystanie narzędzi takich jak Prettier oraz ESLint.
W jednym i w drugim przypadku mówimy o narzędziach, które
krótko mówiąc ułatwiają nam pisanie kodu
poprzez kontrolę składni oraz sposobu formatowania.
W przypadku samego Prettiera dbamy np.
o wcięcia, a ESLint zadba również o to, aby przeanalizować nasz kod pod kątem
chociażby zachowania spójności w wykorzystaniu jakiś elementów składni.
Coś takiego zyskuje niesamowicie na
znaczeniu, szczególnie gdy pracujemy w zespole, ponieważ każdy z nas ma nieco
inne nawyki dotyczące tego, w jaki sposób pisze kod.
W momencie, gdy korzystamy z narzędzi takich jak ESLint czy Prettier, niezależnie od
naszych nawyków pisanych przez nas kod jest odpowiednio dostosowany do
narzuconych z góry zasad, które oczywiście możemy dostosować do swoich potrzeb.
W każdym razie najważniejsze jest jednak to, aby w ogóle podłączyć te narzędzia do
swojego projektu, skonfigurować je w odpowiedni sposób oraz też aktywować
wewnątrz naszego edytora, tak aby w momencie zapisywania pliku bądź też
ewentualnie budowania aplikacji, kod, który piszemy został odpowiednio
przeanalizowany właśnie w poszukiwaniu ewentualnych błędów składni.
No i tutaj jeżeli chodzi o błędy składni, to
nie mam tutaj na myśli jakichś krytycznych błędów, takich jak np.
literówka w słowie kluczowym const,
natomiast bardziej wykorzystanie słowa kluczowego const zamiast war, bądź też np.
nie zostawianie niewykorzystanych zmiennych.
No to myślę, że możemy wrócić do naszego projektu wygenerowanego w Vite i
zainstalować w nim zarówno ESLint jak i Prettiera.
W pierwszej kolejności jako zależności
deweloperskie zainstalujemy sobie Prettiera, a zaraz po nim samego ESLint.
No i teraz w głównym katalogu możemy utworzyć
plik eslintrc.js, z którego wyeksportujemy sobie następujący obiekt.
Następnie będzie nam potrzebny jeszcze drugi plik o nazwie prettierrc.
I tutaj w jego przypadku mówimy o formacie JSON.
W związku z tym, że zarówno ESLint, jak i Prettier zasadniczo zajmują się tym samym obszarem,
musimy również upewnić się, że nie będą wchodzić sobie w drogę.
W tym celu musimy zainstalować rozszerzenie o nazwie eslint-config-
prettier i również zapisać je jako zależność deweloperska.
No i teraz zwróć uwagę, że nawet w tym przypadku mamy tutaj brak spójności
pomiędzy tym, w jaki sposób zapisujemy elementy tablicy.
No i właśnie chociażby w przypadku takich rzeczy zamiast naprawiać je ręcznie,
możemy wykorzystać Prettier i ESLint do tego, aby zrobiły to za nas.
Zanim jednak do tego przejdziemy, musimy utworzyć sobie dwa nowe pliki.
Pierwszym z nich będzie eslintignore,
wewnątrz którego umieścimy chociażby katalog node_modules czy dist oraz kilka dodatkowych plików.
Analogicznie też musimy utworzyć plik
prettierignore, ponieważ też analogicznie nie chcemy, aby Prettier zaglądał nam w te miejsca.
W momencie gdy to zrobimy teraz możemy
wcisnąć command przecinek do tego, aby przejść do ustawień ESLint
i tutaj wyłączyć manualną konfigurację oraz aby zaznaczyć checkbox by ESLint był
uruchamiany za każdym razem, gdy zapisujemy plik.
To samo robimy teraz w przypadku Prettiera, gdzie również zaznaczamy tą opcję on save.
W momencie gdy to zrobimy i wrócimy teraz
do naszego pliku, a następnie zapiszemy go, to zwróć uwagę, że nie tylko został
odpowiednio sformatowany, ale też została zastosowana właściwa składnia.
No i teraz możemy pójść krok dalej i zainstalować kilka dodatkowych paczek.
I teraz pierwsza z nich działa analogicznie jak Prettier
czyli zasadniczo dąży do tego, aby nie było konfliktów pomiędzy jednym a drugim.
eslint-plugin-import umożliwia nam wskazanie
ESLintowi, w jaki sposób rozwiązywane są importy w naszej aplikacji
a ostatnia dba o to, abyśmy nie
popełniali błędów związanych z accessibility.
Zatem w praktyce możemy usunąć sobie tą ostatnią zależność, a następnie dodać te pozostałe.
Tutaj ponownie w związku z tym, że
zapisałem plik, ustawienie zostało w odpowiedni sposób sformatowane.
Tymczasem w naszej konfiguracji brakuje jeszcze jednego ustawienia
w związku z tym, że w naszej aplikacji wykorzystujemy ES Modules.
Jeżeli teraz zapiszemy zmiany, to jeszcze tutaj zwróciłem tylko uwagę na fakt, że w
ustawieniach Prettiera domyślnie nie ma tutaj plików HTML.
W związku z tym upewnij się, że to rozszerzenie jest tutaj uwzględniane
no i gdy przejdziemy sobie np.
do pliku about html i jeżeli tutaj popełnimy jakiś błąd, np.
wstawimy spację tam, gdzie być jej nie powinno, bądź też np.
atrybuty będą sformatowane w niewłaściwy
sposób, to to również zostanie tutaj naprawione.
Zatem jak widzisz, bez wątpienia tutaj
musieliśmy poświęcić chwilę na to, aby zainstalować te wszystkie rozszerzenia
oraz pokonfigurować zarówno ESLint jak i Prettier
natomiast moim zdaniem było warto. Tym
bardziej, że jeżeli chcemy wprowadzić jakąś zmianę w naszym stylu formatowania,
to tak w zasadzie wystarczy zdefiniować ją w pliku konfiguracyjnym.
Oczywiście trzeba tutaj jeszcze podkreślić fakt, że w tym momencie nie wykorzystujemy
tutaj żadnego frameworka takiego jak React czy Vue.
W związku z tym w momencie, gdy będziemy je dodawać, trzeba się upewnić również, że
zostaną tutaj zastosowane odpowiednie reguły oraz ewentualnie pluginy, które
będą związane z narzędziami, po która sięgamy.
Po prostu jest bardzo istotne to, aby ESLint oraz Prettier wiedziały możliwie jak najwięcej
na temat kodu, które piszemy i dzięki temu sprawnie wyłapywał ewentualne błędy.
Co więcej, w przypadku samego ESLinta może
zdarzyć się tak, że będą się pojawiać jakieś specyficzne reguły dla Twojego
kodu, które będą musiały zostać dodane jako wyjątki.
I w tym akurat aspekcie bardzo mocno pomaga nam IntelliJ.
Mianowicie tutaj mamy błąd ESLint informujący nas o tym, że zmienna A
została tutaj zdefiniowana, a jednocześnie nigdy nie została wykorzystana.
W związku z tym mamy tutaj do czynienia z
regułą no-unused-vars, w przypadku której możemy wykonać kilka akcji.
Nie wszystkie z nich są tutaj wyjątkowo
trafne, ale przykładowo ta pierwsza może nam się przydać.
Mianowicie dodanie takiego komentarza
sygnalizuje ESLintowi, że w kolejnej linii należy zignorować zasadę no-unused-vars.
Jednocześnie moglibyśmy teraz skopiować nazwę tej zasady, a następnie przejść do
pliku eslintrc, gdzie możemy zdefiniować sobie reguły.
No i rzeczywiście możemy tutaj dodać tą
regułę, ale dodatkowo musimy zainstalować ją jako zależność.
Konkretnie tutaj jej wartość możemy ustawić na 0 1 i 2.
0 oznacza, że reguła jest ignorowana 1, że
zostaniemy o jej naruszeniu jedynie ostrzeżeni, a 2, że zakończy się błędem.
No i teraz jeżeli wrócimy do pliku app.js
faktycznie nie mamy tutaj informacji o błędzie, a jedynie komunikat ze strony
IntelliJ informujący nas o tym, że ta zmienna nie została wykorzystana.
Jeżeli byłoby tutaj 1, no to mielibyśmy tak jak powiedziałem
wyłącznie ostrzeżenie, które w żaden sposób nie zostanie uwzględnione np.
na etapie budowania naszej aplikacji.
Po prostu w momencie gdybyśmy mieli tutaj
dwa bądź nie mieli w ogóle tego wpisu, no to np.
w momencie budowania naszej aplikacji
mielibyśmy tutaj jasną informację o błędzie.
Ale jednocześnie w przypadku samego Vite,
nawet jeżeli zbudujemy sobie teraz tą aplikację, wszystko pójdzie w porządku.
Aby ESLint został uwzględniony przez Vite
będziemy musieli doinstalować kolejny
plugin. Czyli w pierwszej kolejności zainstalujemy sobie vite-plugin-eslint,
a następnie w katalogu głównym aplikacji musimy utworzyć sobie plik vite.config.js
I tutaj zastosować następującą składnię.
Tymczasem pojawił się tutaj kolejny błąd
informujący nas o tym, że mamy problemy z zaimportowaną paczką Vite.
Co więcej, ten problem wcale nie jest taki oczywisty do rozwiązania ze względu na to,
że to co musimy zrobić, to powiedzieć ESLintowi, żeby analizując kod JavaScript
uwzględniał tutaj funkcje dostępne w wersji np.
ECMAScript 2020.
Po wprowadzeniu tej zmiany błąd, który mamy w tym miejscu zniknie
a my jeżeli ponownie spróbujemy zbudować sobie aplikację, w przypadku której jak widzisz
mamy tutaj błąd, to niestety nie będzie to już takie oczywiste.
Wcześniej jednak pamiętaj o tym, aby w pliku index.js
zaimportować plik app.js tak, aby był uwzględniony w naszym buildzie.
I teraz jeżeli zbudujemy naszą aplikację niestety build się nie powiedzie ze
względu na to, że mamy tutaj błędy ESLint, które muszą zostać naprawione.
No i teraz w momencie gdy je naprawimy
będziemy w stanie zbudować naszą aplikację.
Zatem teraz podsumowując co tak w zasadzie tutaj zrobiliśmy, to przede wszystkim
skonfigurować ESLint do tego, aby analizował nasz kod pod kątem różnych reguł składni,
następnie mamy też prettierrc, następnie
skonfigurowaliśmy również Prettier, który dba o odpowiednie formatowanie
no i ostatecznie zadbaliśmy też o to, aby
te dwa narzędzia nie wchodziły sobie w drogę.
Poza tym, gdyby tego było mało, to uwzględniliśmy tutaj również Vite, który
nie zbuduje nam aplikacji tak długo, jak będą tutaj jakiekolwiek błędy.
Jak się pewnie domyślasz, z jednej strony
może być to dość problematyczne i momentami utrudniające życie, ale w
praktyce po prostu żadne błędy nie zostaną tutaj przepuszczone.
A przynajmniej tak długo, jak trzymasz
dyscyplinę dotyczącą tego, aby nie naprawiać błędów w taki sposób.
I na sam koniec jeżeli jeszcze nie
zdarzyło Ci się korzystać do tej pory z ESLint lub Prettiera lub nie robisz tego świadomie, to
odsyłam Cię również do repozytorium airbnb, gdzie znajdziesz bardzo solidny zestaw
zasad dotyczący pisania kodu JavaScript, z którego swoją drogą można się nawet
nauczyć wielu fajnych rzeczy, a jednocześnie też nic nie stoi na
przeszkodzie, aby przejść sobie przez tutorial, aby wykorzystać te reguły w
Twoim projekcie poprzez po prostu rozszerzenie zdefiniowanych przez nich reguł.
Z doświadczenia muszę powiedzieć, że
większość z nich jest w porządku, natomiast w niektórych przypadkach
istnieje konieczność nadpisania pewnego rodzaju decyzji, które w ich przypadku
pewnie się sprawdzają, ale chociażby w moim już nie do końca.
Teraz nie pozostaje mi już chyba nic innego jak
podziękować Ci za uwagę i zaprosić do kolejnej lekcji.