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.
Co więcej, jeżeli teraz uruchomimy sobie polecenia np.
npm bugs, zostaniemy natychmiast przeniesieni do katalogu Issues.
Swoją drogą, jeżeli już jesteśmy w
repozytorium, to chciałbym zwrócić uwagę na jeszcze jedną praktykę, która jest
stosunkowo rzadko stosowana, a jednocześnie odgrywa znaczącą rolę,
szczególnie w momencie, gdy rozwijamy wiele różnych projektów.
Chodzi mianowicie o plik README i uwzględnienie w nim przynajmniej minimum
komentarzy, które pozwolą uruchomić ten projekt.
Oczywiście w niektórych sytuacjach
wystarczy po prostu uruchomić polecenie npm start
natomiast w momencie, gdy potrzebne są
jakieś dodatkowe kroki, to zawsze warto mieć je tutaj pod ręką.
Tymczasem myślę, że możemy tutaj
zainstalować pierwszą paczkę i będzie nią powiedzmy Express.
Po instalacji w naszym projekcie pojawił
się oczywiście katalog node modules oraz plik package.json lock
Zobaczmy więc o co w nim dokładnie chodzi.
Oczywiście na ten moment nie mam wątpliwości, że plik package.json nie jest
Ci nieznany, ale jednocześnie wiem, że na jego temat wiadomo stosunkowo mało.
Przede wszystkim, tak jak powiedziałem w jednej z poprzednich lekcji, jeżeli
otworzymy sobie plik package.json no to widzimy tutaj listę zależności tego projektu.
Jednak w pliku lock mamy zdecydowanie więcej informacji, ponieważ przechowujemy
tutaj również zależności, które są niezbędne do uruchomienia Express.js
Oznacza to, że tworzy nam się tutaj takie drzewo zależności uwzględniające np.
wersje poszczególnych paczek, które
aktualnie tutaj obowiązują w naszym projekcie.
Taki plik naturalnie umieszczamy w naszym repozytorium ze względu na to, że musimy
zadbać o to, aby inne osoby pracujące nad naszym projektem oraz również serwer
produkcyjny miał dostęp do tych samych wersji naszych zależności.
Jednocześnie jest jeden wątek, o którym należy tutaj pamiętać i jest nim
konkretnie sposób określania wersji zależności.
Otóż jeżeli przejrzymy sobie teraz dostępne wersje pakietu Express, to mamy tutaj np.
wersję 4.17.0.
Jeżeli uwzględnimy ją tutaj w naszych zależnościach, no to oczywiście w momencie
skasowania katalogu node-modules oraz pliku lock po instalacji zależności zostanie
wygenerowany plik lock uwzględniający tą konkretnie wersja.
Ale jeżeli w tym momencie chcielibyśmy dokonać aktualizacji i jednocześnie
znajdowałby się tutaj daszek, no to nasz plik Packet.json log zasadniczo się tutaj zmieni.
Mianowicie zwróć uwagę, że pomimo tego, że mamy tutaj zapisaną wersję 4.17.0,
nasza wersja zależności przeskoczyła aż na 4.18.1.
I teraz co ciekawe, to samo mogłoby się wydarzyć na samym początku, w momencie
gdybyśmy nie mieli zarówno pliku lock oraz katalogu node-modules, a
byśmy po prostu w ten sposób zainstalowali nasze zależności.
W tej sytuacji ponownie jeżeli zajrzymy sobie do
tego pliku, okaże się, że faktycznie zainstalowana wersja zależności została
zmieniona w stosunku do tego, co mamy uwzględnione w Package.json.
Oczywiście tutaj wszystko działa
poprawnie, ale brak świadomości tego, że tak może być oznacza potencjalne kłopoty.
Z tego powodu, tak jak powiedziałem,
znacznie lepiej jest stosować albo tylde do tego, aby aktualizować wyłącznie patche
lub też bezpośrednio określać wersję paczki, którą chcemy zainstalować.
Tym bardziej, że jeżeli nawet uwzględnili byśmy tutaj zapis bezpośredni, to i tak w
celu aktualizacji naszego projektu moglibyśmy uruchomić polecenie npm outdated.
W ten sposób zostaną wyświetlone wszystkie zależności naszego projektu wraz z
informacją o tym, w przypadku których pojawiły się nowe wersje.
No i tutaj dopiero w momencie, gdybyśmy chcieli rzeczywiście zaktualizować
jakąś paczkę, moglibyśmy wykorzystać polecenie npm install express, a następnie
po @ podać konkretną wersję, którą chcemy zainstalować.
W rezultacie, jeżeli przejdziemy sobie teraz do pliku package.json
no to akurat tutaj wersja co prawda
została zaktualizowana, ale dalej mamy w tym miejscu ^.
Taka sytuacja nie miałaby miejsca w
momencie, gdyby wcześniej nie było go tutaj.
Jeżeli jednak chcielibyśmy domyślnie
instalować paczki o określonej wersji, moglibyśmy uruchomić polecenie npm config
set, a następnie opcję save-exact ustawić na true.
Coś takiego zmieni nasze domyślne
ustawienia i od tej chwili gdy będziemy instalować paczki o określonej wersji
no to w pliku package.json tego ^ ani ~ po prostu nie będzie.
Myślę, że jest to dość dobre ustawienie,
które domyślnie nie jest aktywne, a rzeczywiście może pomóc.
I tutaj jeżeli chodzi jeszcze o polecenie
npm config to mamy tutaj możliwość ustawienia domyślnego adresu email oraz w
przypadku właściwości name naszego imienia i nazwiska.
W momencie gdy to zrobimy, za każdym razem, gdy będziemy tworzyć nowy Package.json
z pomocą npm init, te dane zostaną w tym miejscu uwzględnione.
Jeżeli z jakiegoś powodu interesowałoby
Cię to, gdzie te informacje są przechowywane, no to mówimy tutaj o pliku
znajdującym się w katalogu domowym o nazwie npmrc.
Wewnątrz niego przechowywane są właśnie wszystkie ustawienia domyślne
i co ciekawe, taki plik npmrc możesz utworzyć również w katalogu
bieżącego projektu i tym samym nie będą one obowiązywały globalnie w Twoim
systemie, tylko w ramach właśnie tego konkretnego projektu.
I swoją drogą, jak już byliśmy tutaj w
katalogu domowym, no to zwróć uwagę, że oprócz pliku npmrc
mamy tu jeszcze katalog .npm, który stanowi nic innego jak pamięć podręczną npm.
W niektórych sytuacjach może okazać się, że będziesz potrzebować tam zajrzeć.
Tymczasem ostatnią informacją jaką mam dla Ciebie jest wykorzystanie polecenia npx.
I swoją drogą od razu mamy tutaj przykład
jakiegoś gista, które możemy wykonać bezpośrednio właśnie z pomocą npx.
Przykładowo jeżeli teraz wcisnę Enter, mamy tutaj informację, która została tutaj
wykonana z pomocą Console Loga znajdującego się w tym gist.
I co więcej, coś takiego jest tutaj możliwe ze względu na to, że npx
kontaktuje się bezpośrednio z rejestrem npm.
Oznacza to, że za jego pomocą możemy odwoływać się do paczek, które fizycznie
nie są zainstalowane jako globalne pakiety npm na naszym komputerze.
Przykładem może być chociażby Vue CLI, w przypadku którego nawet jasno mamy powiedziane,
że CLI dostępne jest albo w katalogu node-modules, albo też jesteśmy w stanie
wykorzystać tutaj npx do tego, aby wykonywać tutaj polecenia bez konieczności
np. posiadania CLI zainstalowanego na naszym komputerze.
Dodatkowo, analogicznie jak w przypadku
instalacji, jesteśmy w stanie tutaj podać wersję paczki, do której chcemy się
odwołać i tym samym jeszcze bardziej ułatwić sobie cały proces.
Jeżeli chodzi o npx, według mnie najlepiej
sprawdza się właśnie w przypadku, gdy mamy do czynienia z różnego rodzaju CLI.
Tymczasem jeżeli chodzi o tą lekcja to by było na tyle.
Pamiętaj proszę, aby uwzględnić to jak zachowują się wersje projektów w przypadku
pliku package-lock oraz dlaczego jest on tak istotny.
Jednocześnie dbaj też proszę o to jak wygląda Twój plik Package.json
ze względu na to, że to w jaki sposób będziesz nim zarządzać będzie docenione
zarówno przez inne osoby w Twoim zespole, jaki również Ciebie w przyszłości.
Po prostu wracając kiedyś do tego
projektu, będziesz w stanie się w nim lepiej odnaleźć.
No a tymczasem nie pozostaje mi nic
innego, jak zaprosić Cię do kolejnej lekcji.