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.
Nie wiem czy zdajesz sobie z tego sprawę, ale w przypadku znajomości JavaScriptu i w
szczególności Node.js możesz tworzyć również aplikacje, które
niekoniecznie będą posiadały graficzny interfejs i będą działać np.
w przeglądarce, ale mogą funkcjonować bezpośrednio w terminalu.
Inaczej mówiąc chodzi mi tutaj o aplikacje CLI.
Taki rodzaj aplikacji może funkcjonować totalnie niezależnie lub też
być częścią Twojego istniejącego projektu i tym samym być odpowiedzialnym za
realizowanie jakiś ściśle określonych zadań, np.
tych dotyczących deploymentu Twojej aplikacji.
Zatem na początku upewnij się tylko, że
mam ustawioną właściwość type na module ze względu na to, że chciałbym tutaj
wykorzystywać ES modules a nie CommonJS.
Przypomnę tylko, że jest to sposób
importowania modułów, w przypadku którego zamiast funkcji require do importowania
modułów wykorzystujemy słowo kluczowe import from.
I teraz kolejnym krokiem będzie dodanie
tutaj jeszcze skryptu inicjalizucjącego, którego zadaniem będzie nic innego jak
wykonanie z pomocą Node.js skryptu zapisanego w katalogu bin initialize.
W związku z tym utworzymy sobie ten plik,
wewnątrz którego na początku zastosujemy prosty console log.
Nie stanowi chyba tutaj zaskoczenia, że w momencie uruchomienia tego skryptu
wyświetli nam się tekst zapisany w Console logu.
Cała magia zaczyna się w momencie, gdy uświadomimy sobie, że z pomocą Node.js
jesteśmy w stanie napisać tutaj skrypt, który zarówno może kontaktować się z
zewnętrznymi usługami lub też wykonywać różnego rodzaju aplikacje na aktualnej
maszynie i mam tutaj na myśli chociażby manipulację plikami.
Zatem raz jeszcze chciałbym podkreślić, że
tego rodzaju skrypty możesz wykorzystać na potrzeby np.
automatyzacji powtarzalnych zadań lub też np.
jako narzędzie, które pozwolą Ci szybko wystartować jakiś projekt i utworzyć jego
konkretną strukturę, zainstalować zależności itd.
Tak czy inaczej, jednym z ważniejszych elementów jeżeli chodzi o tworzenie takich
skryptów jest możliwość przekazywania tutaj zmiennych.
I ponownie w ten sposób przekażemy sobie moje imię lub też po prostu ksywkę Overment.
W tym momencie, jeżeli chciałbym odczytać te argumenty, mógłbym odwołać się do
bieżącego procesu, a następnie z właściwości argv wyciąć dwa pierwsze
elementy, które zawierają informacje na temat aktualnie wykonywanego pliku i tym
samym w tym przypadku nie są nam tutaj potrzebne.
Zatem jeżeli spróbujemy odczytać sobie te
wartości, no to okaże się, że rzeczywiście otrzymaliśmy tutaj nasz parametr.
Jednocześnie jest tutaj kilka elementów, o które musimy zadbać.
Po pierwsze musimy wyciągnąć samą wartość.
Po drugie również klucz.
I po trzecie dobrze byłoby zadbać o to, żeby do tej zmiennej nie trafiły jakieś
niepożądane wartości oraz miały odpowiedni typ.
W związku z tym znacznie lepszym pomysłem
będzie sięgnięcie po istniejącą paczkę, która będzie odpowiedzialna za parsowanie
argumentów przekazanych do naszego skryptu.
No i jak się pewnie domyślasz, takich
polecanych paczek do tego, aby się tym zająć mamy przynajmniej kilka.
I mowa tutaj między innymi o Commander.js Yargs, Minimist czy po prostu Arg.
Jeżeli chodzi o to na jaką z tych paczek się zdecydujesz tak naprawdę moim zdaniem
nie ma to większej różnicy i znacznie lepiej jest je po prostu przejrzeć i
sprawdzić po prostu jak mogą sprawdzić się nam w danej sytuacji.
Jeżeli chodzi o mnie wykorzystam sobie tutaj
Minimist. Tak jak mamy tutaj w dokumentacji.
Musimy tutaj przekazać nasze argumenty do
funkcji Minimist, którą oczywiście musimy zaimportować.
W moim przypadku paczka została już
zainstalowana, więc jeżeli teraz ponownie uruchomimy sobie ten skrypt, no to zwróć
uwagę, że tym razem nasz obiekt wygląda nieco inaczej i jesteśmy w stanie łatwo
odwołać się do poszczególnych parametrów przekazanych do naszego skryptu.
Zatem już teraz parsowanie mamy z głowy.
Natomiast faktycznie trzeba tutaj
przyznać, że w niektórych sytuacjach znacznie lepiej będzie sięgnąć po Arg ze
względu na to, że przykładowo będziemy mogli tutaj określić typ danych, który
może zostać wprowadzony do naszej aplikacji.
W naszym konkretnie przypadku akurat nie jest to wymagane
natomiast myślę, że na potrzeby nieco
bardziej złożonych aplikacji jak najbardziej jest to dobre rozwiązanie.
Kolejnym istotnym elementem tworzenia CLI jest pytanie użytkownika o dane.
Tutaj znowu analogicznie mamy do
dyspozycji przynajmniej kilka paczek, które się tym zajmują,
natomiast myślę, że jedną z najprostszych
i najbardziej użytecznych jest po prostu prompts.
Zaimportujemy ją sobie teraz, a następnie wykorzystamy w następujący sposób.
Jak widzisz, mamy tutaj do dyspozycji składnię
async await, więc bez problemu będziemy w stanie oczekiwać na wartość zapisaną przez
użytkownika, którą potem będziemy mogli sobie odczytać.
No i poza tym, jak widzisz, też wygodnie jesteśmy w stanie poprzez obiekt
konfiguracyjny określić sam typ pola, jego podstawowe ustawienia oraz dodatkowo
jesteśmy w stanie napisać funkcję, która będzie walidować wprowadzone informacje.
Zatem teraz jeszcze tutaj musimy poprawić typ danych i możemy uruchomić nasz skrypt.
W tym momencie możemy zapisać tutaj yes, no i rzeczywiście wartość zostanie odczytana,
a dodatkowo pojawił się tutaj taki symbol sygnalizujący, że wszystko poszło w
porządku, więc teoretycznie moglibyśmy tutaj pytać też o pozostałe informacje.
No i tutaj jeszcze poza tym mam Ci do pokazania kilka
rozszerzeń, które możemy sobie w tym momencie zaimportować do naszego skryptu.
Mianowicie pierwszym z nich jest ora do tego, aby wyświetlać różnego rodzaju
loadery czy też spinnery,
następnie mamy chalk do tego, aby stylować wyświetlany tekst i
dodatkowo mamy też boxen po to, aby wyświetlać tekst w boxach.
W rezultacie, jeżeli teraz uruchomimy sobie nasz skrypt i
ponownie odpowiemy na pytanie, to jak widzisz mieliśmy tutaj spinner, a teraz
wyświetlił się czerwony tekst oraz tekst w boxie.
Te wszystkie elementy to oczywiście
pewnego rodzaju dodatek, z którego możesz, ale nie musisz korzystać.
Jednocześnie z własnego doświadczenia wiem, że korzystanie z takich narzędzi po
prostu sprawia, że tworzenie CLI jest zdecydowanie wygodniejsze, a
osiągnięte rezultat jest łatwiejszy w użyciu.
Na koniec dnia
jednak użyteczność naszego skryptu będzie zależała przede wszystkim od tego, jak
niezawodnie będzie funkcjonował oraz jakie zadania będzie dla nas realizować.
Jeżeli chodzi o narzędzia, które pomogą Ci
przy budowaniu tego rodzaju skryptów, z całą pewnością mogę polecić jeszcze zx.
Jest to narzędzie, z pomocą którego jesteś w stanie w bardzo prosty sposób,
również wykorzystując składnię async await wykonywać polecenia w terminalu.
I teraz przykładowo jeżeli uruchomimy sobie nasz skrypt, to jak widzisz od razu wyświetlił
się tekst, który zapisaliśmy jako polecenie w tym miejscu i co ważniejsze
mieliśmy od razu tutaj dostęp do zaimportowania narzędzi.
Zatem myślę, że na tym etapie już
doskonale rozumiesz na czym polega idea pisania CLI z pomocą
Node.js, ale jeżeli chodzi o praktyczne wykorzystanie takich skryptów,
to one w zasadzie zależą już od tego, co konkretnie chcesz osiągnąć.
Tak jak powiedziałem, w niektórych
sytuacjach mogą być to skrypty, które będziesz wykonywać totalnie niezależnie od
swoich aplikacji, po to, aby ułatwiać sobie jakieś codzienne zadania, a z
drugiej strony mogą być to sytuacje bezpośrednio związane z aplikacją
i w dodatku takie skrypty mogą pomóc Ci na
późniejszym etapie w momencie konfigurowania procesu Deploymentu Twojej
aplikacji na serwerze produkcyjnym, gdzie z pomocą np.
workflow zdefiniowanego w GitHub Actions jesteś w stanie wykonywać takie skrypty i
tym samym stosując te wspomniane przeze mnie narzędzia, jesteś w stanie opracować
skrypt, który dodatkowo będzie bardzo jasno informował Cię o postępach budowania
aplikacji i o ewentualnych błędach, które będą z tego wynikały.
Ostatecznie jednak przygotowywanie takich
skryptów z pewnością zajmuje dodatkowy czas i trzeba go po prostu znaleźć.
Jednocześnie moim zdaniem warto
tym bardziej, że jest tutaj ogromny
potencjał do tego, że raz zainwestowany czas w przygotowanie takiego
skryptu będzie zwracał się wielokrotnie. Ponieważ taka mądrze opracowana aplikacja
niewykluczone, że będzie służyć Ci na przestrzeni różnych projektów.
Tymczasem dzięki za uwagę i zapraszam Cię do kolejnej lekcji.