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.
W temacie obsługi samego terminala istnieje wiele różnych technik, które
możesz stosować i które mogą Ci się sprawdzić w różnych przypadkach.
Ja teraz skupię się na kilku z nich, które
stosuję i które sprawdzają mi się doskonale w codziennej pracy.
Tutaj od razu zaznaczę, że jeżeli terminal nie stanowi dla Ciebie żadnej tajemnicy,
to prawdopodobnie większość z nich okaże Ci się banalna
natomiast i tak polecam zostać na chwilę,
ponieważ pokaże kilka elementów, które mogą okazać się dla Ciebie przydatne.
Przykładowo w tym przypadku jednym skrótem
uruchomiłem iTerm i jednym skrótem mogę go też wyłączyć.
Podobnie też działa to na przykładzie Warpa, gdzie mogę po prostu szybko wywołać to
okno, a następnie je schować, a potem znowu włączyć tylko po to, aby kontynuować
pracę lub też odwołać się do jakichś wyników, które tutaj osiągnę.
Jeżeli chodzi o konfigurację takiej opcji, to w jednym i drugim przypadku chodzi po
prostu o ustawienie globalnego skrótu klawiszowego, który w przypadku iTerma
możesz ustawić dokładnie tutaj i ja akurat nie będę teraz napisała swojego profilu,
natomiast w przypadku Warpa sytuacja wygląda tak, że ten skrót również dostępny
jest jako Hotkey Window, w przypadku którego ten skrót trzeba zdefiniować i w
moim przypadku jest to Caps Lock oraz litera W.
Jeżeli zastanawiasz się dlaczego u mnie Caps Lock
wygląda w ten sposób, to po prostu z pomocą aplikacji Karabiner-Elements
mam tutaj zdefiniowaną prostą regułę, która zamienia mi zachowanie klawisza Caps
Lock na wciśnięcia klawiszy takich jak Command, Control, Option i Shift.
Jest to świetna opcja do tego, aby właśnie zyskać nową paletę skrótów klawiszowych,
które można wykorzystywać na potrzeby developmentu.
Kolejnym elementem, na który warto zwrócić uwagę są własne skrypty.
Przykładowo w tym miejscu mam dość prosty skrypt, który kiedyś skopiowałem z
internetu tylko po to, aby wysyłać proste zapytania http
w tym przypadku na webhooki. Takich skryptów mam przynajmniej kilkanaście jak nie
kilkadziesiąt, które wykonują dla mnie różnego rodzaju małe akcje.
Czasem jest to przesłanie pliku, czasem wywołanie właśnie jakiegoś webhooka, a innym
razem pobranie jakiejś informacji i schowanie jej do schowka.
W większości przypadków z takich skryptów
korzystam w połączeniu z aplikacją Keyboard Maestro bądź też aplikacją Shortcuts.
W jednym i drugim przypadku jesteśmy w stanie utworzyć sobie tutaj proste makro, które
następnie umożliwi nam dodanie akcji w postaci wykonania skryptu Shell.
Taki skrypt może być zapisany bezpośrednio
tutaj lub też możemy wskazać plik, w którym zapisaliśmy jego treść.
Jest to w tym przypadku o tyle istotne, że w przypadku Keyboard Maestro możemy
przypisać sobie tutaj różnego rodzaju triggery, czyli wyzwalacze tej akcji,
które będą uruchamiać ten wspomniany skrypt.
Zatem mogę wywołać np.
skrót klawiszowy tylko po to, aby utworzyć
sobie serię katalogów, które rozpoczyną mój nowy projekt.
Jeżeli chodzi o takie akcje oczywiście nie musisz tego robić,
natomiast ja zwracam uwagę na to, że przygotowanie skryptów, które realizują
dla Ciebie różne zadania po prostu niesamowicie ułatwia pracę
szczególnie w przypadku, gdy mamy szereg różnych powtarzalnych czynności, w
przypadku których zwykłe alias po prostu nie wystarczy.
I przy okazji, jak już jesteśmy w tym
skrypcie, to jego ostatnia linia wyświetla zawartość zwróconą przez ten Webhook.
Tą zawartość w przypadku Keyboard Maestro
mogę po prostu przechwycić, a następnie przekazać do innej akcji, takie jak np.
wyświetlenie powiadomienia, utworzenie nowego katalogu czy otworzenie konkretnego
adresu czy też nawet konkretnej aplikacji desktopowej.
Zatem druga wskazówka w pracy z terminalem
polega na tym, aby przygotować sobie skrypty, które ułatwią nam pracę.
Swoją drogą, jak już jesteśmy przy
tworzeniu skryptów, to akurat ich tworzenie znacząco wybiega poza zakres
tego programu, ale jednocześnie chciałbym zwrócić Twoją uwagę na fakt, że faktycznie
warto w stopniu przynajmniej podstawowym umieć czytać oraz tworzyć proste skrypty.
Poza tym, tak jak w tym przypadku, podobnie jak ja, możesz skopiować skrypt
znajdujący się w internecie i tylko zalecam, aby upewnić się co dokładnie
oznaczają flagi, które zapisujemy tutaj, aby nie narobić sobie ewentualnych szkód.
Jednocześnie może Ci teraz przyjść do
głowy, że aplikacja Keyboard Maestro jak i Shortcuts nie będą Cię interesować, więc tak
naprawdę nie ma potrzeby, aby tworzyć takie skrypty.
Otóż jesteś w błędzie ze względu na to, że mogą zdarzyć się aplikacje, przy których
rozwoju będzie konieczność odwołania się do jakiegoś serwerowego skryptu.
Przykładem takiej aplikacji w moim przypadku jest współtworzony przeze mnie
Easy Timer, w przypadku którego potrzebuję generować takie oto zegary.
W tym akurat przypadku wyświetla się on w
przeglądarce, więc obsłużony jest JavaScriptem,
natomiast w tym narzędziu można pobrać też wersję do emaila, który wymaga tego, aby
taki zegar został wygenerowany do formatu GIF.
Dla mnie oznaczało to mniej więcej tyle, że mogłem skorzystać z jakiejś dostępnej
paczki, która byłaby w stanie zamienić mi np.
canvas na gif,
natomiast w praktyce okazało się, że gif-encoder jest po prostu niewystarczający.
Tzn.
do wygenerowania prostego gifa jest jak najbardziej w porządku, ale w moim
przypadku chodziło o dość dużą skalę i z tego powodu bardzo szybko zasoby mojego
serwera zostały po prostu zapełnione i tym samym aplikacja przestawała działać.
Co więcej, tutaj ta kwestia wydajności była naprawdę krytyczna ze względu na to,
że wchodziliśmy na Product Hunt , gdzie swoją drogą zdobyliśmy pierwsze miejsce,
ale oczywiście jak można sobie wyobrazić
mieliśmy tego dnia kilka tysięcy osób,
które niemal jednocześnie chciały wygenerować sobie timer.
Z tego powodu musiałem być nieco bardziej
kreatywny, jeżeli chodzi o generowanie gifów i w tym przypadku sięgnąłem po to
narzędzie, które posiada swoją wersję CLI
czyli dokładnie mamy tutaj sytuacje, o
której mówiłem w jednej z poprzedniej lekcji.
Jednocześnie nie interesowało mnie do
końca to, aby wykonywać ręcznie polecenia, które w tym przypadku konwertują pliki,
ale interesowało mnie to, aby z poziomu mojej aplikacji i w tym przypadku
aplikacji ExpressJS odwołać się do tej konkretnej komendy.
Okazuje się, że istnieje kolejna paczka, o
której słyszałem między innymi od Marcina Czarkowskiego z przeprogramowani.pl
Jednocześnie ta sama paczka polecana jest
również przez twórców Reicasta do tworzenia rozszerzeń do tego launchera, co też
zresztą niejednokrotnie zdarzało mi się robić.
W każdym razie, jeżeli zobaczysz co tutaj
się dzieje, to tak naprawdę jesteśmy w stanie sięgać po polecenia, które
normalnie wykonujemy w terminalu z poziomu aplikacji Node.js
Niesamowicie przydatna sprawa,
szczególnie w przypadku, gdy potrzebujemy w jakiś sposób bezpośredni odwołać się do
jakiegoś interfejsu dostępnego właśnie w formie poleceń.
Zanim przejdziemy dalej, chciałbym zwrócić uwagę na jeszcze jeden szczegół, a
mianowicie słowo kluczowe await oraz zasadniczo wykorzystanie Promise API.
Zobacz, w jaki sposób łączą się ze sobą te wszystkie technologie, w przypadku których
znowu JavaScript odgrywa główną rolę i jednocześnie też daje ogromne możliwości.
A przy okazji spójrz proszę jeszcze tutaj,
gdzie mamy jasny sygnał tego, że oprócz JavaScriptu warto nauczyć się TypeScript.
Do tego jeszcze będziemy wracać, więc przejdźmy do kolejnego tematu.
Mianowicie sam terminal możemy
wykorzystywać również wewnątrz naszego edytora kodu, czy też bardziej IDE.
W moim przypadku zwykle pokazuję, że mój
edytor kodu zwykle wygląda dokładnie tak jak widać, czyli nie ma tutaj praktycznie
żadnych elementów interfejsu poza zakładkami oraz samym kodem.
Czyli w zasadzie jest to niezbędne
minimum, a jednocześnie nie ma tutaj elementów, które mnie rozpraszają.
Jednocześnie, jak być może się domyślasz,
niekoniecznie wygląda to dokładnie tak samo
przez cały czas, gdy pracuję z kodem.
Przede wszystkim jednym skrótem, często zdarza mi się uruchamiać sidebar, gdzie po
prostu muszę przejść przez konkretne pliki.
Naturalnie w przypadku, gdy potrzebuję
szybko przejść do innego pliku projektu, uruchamiam sobie paletę poleceń i
konkretnie w kategorii Files przeszukuję wybrane pliki.
Czasem bywają sytuacje, że niekoniecznie wiem, do którego pliku konkretnie chcę się
odwołać, a jednocześnie uruchamianie Sidebara w tym celu mija się po prostu z celem.
Wtedy sięgam po Navigation Bar, który
umożliwia mi jeszcze szybsze nawigowanie po plikach projektu w przypadku, gdy
faktycznie nie wiem do końca gdzie konkretnie chcę dojść.
No i teraz już dochodząc do sedna jednym z
elementów, po które sięgam regularnie jest oczywiście wbudowane w IDE terminal.
Mam tutaj dostępne dokładnie ten sam
terminal oferujący dokładnie takie same możliwości jak w przypadku iTerm2.
Pojawia się więc tutaj pytanie, które otrzymałem podczas spotkań indywidualnych
z osobą, której pomagam w nauce programowania.
Chodziło o to, dlaczego w ogóle sięgać po
narzędzia takie jak iTerm czy Warp, skoro zarówno Visual Studio Code, jak i
IntelliJ czy też inne IDE zazwyczaj mamy dostępne wbudowane terminale.
Odpowiedź na to pytanie brzmi Oczywiście nie ma potrzeby, aby korzystać równolegle
z tych różnych narzędzi, ale jednocześnie w momencie, gdy nauczysz się obsługi
terminala w stopniu naprawdę podstawowym, który jednocześnie umożliwi Ci
wykorzystanie tych wszystkich wskazówek, przez które przeszliśmy w tym filmie, to
nagle okaże się, że posiadanie zewnętrznego terminala lub też możliwość
wywoływania go w formie szybkiego okna, które umożliwi nam natychmiastowe
wykonanie jakiegoś polecenia, okazuje się niezwykle przydatne.
No i teraz jeżeli nadal nie widzisz w tym
wartości, to myślę, że i tak do tego miejsca w pewnym momencie dojdziemy.
Jeżeli jednak widzisz w tym wartość, ale jednocześnie nie posiadasz wystarczającej
wiedzy na temat pisania własnych skryptów oraz poleceń, no to w takiej sytuacji nie
pozostaje mi nic innego jak zaprosić Cię do kolejnej lekcji.