od Podstaw
9 godz. 20 min · JavaScript · Full-stack i Programowanie
Piotr PalarzWeb DeveloperJavaScript to język programowania, który napędza niemal wszystkie strony internetowe. Dopełnia on technologie HTML i CSS, za pomocą których tworzymy strukturę i wygląd dokumentu. Co jednak w sytuacji, gdy chcemy po kliknięciu w wybrany przycisk wyświetlić powiększone zdjęcie lub wczytać dodatkowe dane z serwera? To właśnie w takich sytuacjach przydaje się język JavaScript i tzw. DOM API, dostępne w przeglądarce. Jak się przekonasz, możliwości nowoczesnych przeglądarek w połączeniu z tym językiem są naprawdę ogromne.
Język JavaScript może być używany nie tylko na stronach internetowych. Z tego powodu, w kursie omówimy najpierw najważniejsze konstrukcje tego języka, które są niezależne od platformy uruchomieniowej. Dzięki temu zbudujesz fundamenty niezbędne do tego, by wykorzystać ten język np. w środowisku Node.js. Krok po kroku omówimy sposoby tworzenia zmiennych, dostępne typy danych i operatory. Następnie zobaczysz jak tworzyć tablice i obiekty, z jakich instrukcji warunkowych i pętli możesz korzystać, a także jak tworzyć własne funkcje. Przekazywana wiedza uwzględniać będzie nowości, które pojawiły się w języku wraz z rewolucyjnym standardem EcmaScript 6 (ES6).
Sam język JavaScript to nie wszystko, by tchnąć ducha w strony internetowe. Z tego powodu, przeglądarki internetowe udostępniają tzw. DOM API. To interfejs, który z użyciem języka JavaScript pozwala na manipulację treścią i wyglądem strony. W kursie bardzo dokładnie omówimy czym jest Obiektowy Model Dokumentu, a także jak z nim pracować. Zobaczysz jak tworzyć nowe elementy HTML i wstawiać je na stronę, jak modyfikować ich treść, atrybuty, style czy klasy CSS. Poznasz sposoby na odczytywanie położenia elementu na stronie i jego wymiarów, które będą niezbędne w wielu sytuacjach. Dowiesz się także, jak przypisywać obsługę zdarzeń w przeglądarce, by np. wywołać własną funkcję, gdy ktoś kliknie w wybrany przez Ciebie przycisk.
JSON to popularny format wymiany danych, a Ajax to potoczna nazwa dla asynchronicznych zapytań HTTP, które wysyłać możemy z poziomu kodu JavaScript. Dziś niemal każda strona internetowa wykorzystuje te technologie. W niektórych przypadkach jako dopełnienie podstawowej funkcjonalności witryny, a w innych jako główny motor napędzający stronę. Jeśli kiedykolwiek widziałeś, jak na stronie internetowej jakaś treść "doczytuje" się np. podczas przewijania - widziałeś w praktyce Ajax. W jednym z rozdziałów kursu zobaczysz, jak pracować z tym formatem, a także jak wysyłać wspomniane zapytania do serwera.
Choć kurs który masz przed sobą, jest kursem dla początkujących, to aby zrozumieć jak działa język JavaScript i jak z nim się współcześnie pracuje, omówimy dwa ważne tematy - zarządzanie zależnościami i bundlowanie kodu. Dowiesz się czym jest npm i jak z jego pomocą pobierać paczki gotowego kodu z internetu, a także jak sprawić, by bez trudnu dołączać je do własnego kodu. W tym celu skorzystamy z narzędzia snowpack, które pozwoli nam także na optymalizację kodu przed jego wypuszczeniem w świat. Na tym etapie omówimy również jak działają moduły ESM, pozwalające dzielić kod na mniejsze części.
Kurs podzielony został na możliwie krótkie lekcje, do których w każdej chwili możesz wrócić. Jeśli zatem zapomnisz jak odczytywać wymiary elementu na stronie, szybko odnajdziesz odpowiednią lekcję. Czym jednak była by sama teoria i proste przykłady, bez pokazania, jak połączyć je w całość i wykorzystać w praktyce? Dobra wiadomość jest taka, że w kursie stworzymy aż 5 praktycznych projektów, wykorzystujących zdobytą wcześniej wiedzę. Najpierw napiszemy program losujący Dużego Lotka, następnie dynamiczny pasek postępu przeczytania artykułu, dymek pojawiający się nad elementem po najechaniu na niego myszą, wygenerujemy tabelkę w użytkownikami na podstawie danych JSON, a na koniec tworzymy prosty odtwarzacz wideo, z możliwością pauzowania i przewijania filmu.
Kurs ten jest dla wszystkich osób, które znają już podstawy HTML i CSS i chciałyby przejść poziom wyżej i dodać do swoich stron dynamiczności. Żadna wcześniejsza wiedza z zakresu JavaScript nie jest wymagana, ale zalecana jest podstawowa wiedza z zakresu samego programowania (czym są zmienne, pętle, funkcje itd.). Materiał ten będzie również świetnym odświeżeniem i usystematyzowaniem wiedzy dla osób, które już z tym językiem miały do czynienia. Po przerobieniu tego kursu będziesz gotowy, by poznawać język JavaScript dalej i zacząć korzystać z nowoczesnych frameworków.
W tym rozdziale zajmiemy się środowiskiem
Node.js, ale nie będziemy go omawiać w taki sposób, żeby np.
wykonywać kod serwerowy, bo do tego potrzebowalibyśmy osobnego kursu
i taki kurs jest już na eduweb.pl, ale będę chciał Ci pokazać jak można wykorzystać Node.js
do tego, aby uruchamiać narzędzia, które wspomagają naszą pracę z front-endem,
czyli z językiem JavaScript dla przeglądarek internetowych.
Bo okazuje się, że z użyciem Node można
tworzyć różne rozwiązania i zostało stworzonych mnóstwo takich ciekawych
narzędzi, które pozwalają nam wydajniej pracować z kodem JavaScript.
Na początek będziemy potrzebowali
zainstalować sobie środowisko i przejdziemy na stronę nodejs.org
i wystarczy, że sobie pobierzesz tutaj klikając ten duży przycisk wersję LTS.
I w momencie jak Ty oglądasz ten kurs, tutaj może być inna wersja niż u mnie.
Niemniej jednak pobierz sobie tą wersję LTS, czyli Long Term Support.
Ona ma po prostu długoterminowe wsparcie.
Nie będę pokazywał jak to zainstalować, bo
zarówno na Macu jak i na Windowsie to jest standardowy instalator, gdzie po prostu
klikasz next i zostaw wszystkie domyślne opcje,
nic tam po prostu nie przestawiaj.
Na pewno sobie z tym poradzisz.
No i teraz po zainstalowaniu takiego środowiska potrzebujemy przejść sobie do
terminala, żeby sprawdzić czy Node zainstalowało się poprawnie.
Ja korzystam z terminala wbudowanego w
VS Code, więc polecam Ci również to zrobić.
A więc jeżeli mamy tutaj edytor,
wystarczy, że przejdziemy do View i następnie do Terminal, otworzy nam się z
boku, albo tutaj u dołu może Ci się otworzyć takie oto okienko.
Jeżeli nigdy z tego nie korzystałeś chociaż może pewnie to widziałeś np.
w Windowsie jest coś takiego jak wiersz polecenia.
To jest mniej więcej to samo, tylko otwiera się tutaj.
Na Macu mamy aplikację Terminal, a tutaj jest to po prostu wbudowane VS Code, ale
pod spodem korzysta właśnie z tych systemowych rozwiązań.
I jeżeli Node.js uda się poprawnie
zainstalować, to po wpisaniu node-v zwróci nam wersję Node.js.
Jeżeli otrzymasz tutaj jakiś błąd, że takie polecenie nie istnieje, to po tej
instalacji koniecznie jeszcze zrestartuj system.
Jeżeli natomiast tutaj wersja zostanie zwrócona, to znaczy, że wszystko jest ok.
No i drugie narzędzie, które razem z Node się zainstaluje to jest npm.
Też możemy sprawdzić jego wersję
i dzięki temu wiemy, że ono jest dostępne i działa.
I tym narzędziem zajmiemy się w lekcji kolejnej.
Skoro zatem mamy już Node.js, to ja w tym kursie kilkukrotnie wspominałem, że jest
to nic innego jak platforma uruchomieniowe dla języka JavaScript.
Czyli my do tej pory uruchamialiśmy nasze
skrypty w środowisku przeglądarki internetowej
a teraz pokażę Ci, że możemy również uruchamiać skrypty z użyciem Node.
Ale zanim to zrobimy to pokażę Ci, że jak
wpiszemy samo node to zostaniemy przeniesieni do takiej specjalnej konsoli.
Jest to taki interfejs Repl, w którym
możemy uruchamiać kod JavaScript. Czyli tak samo jak w przeglądarce
mieliśmy konsolę, w której czasami sobie coś eksperymentowaliśmy w tym kursie
podobnie tutaj możemy sobie wykonywać kod
JavaScript, na przykład utworzyć jakąś stałą, powiedzmy number,
przypisać tu wartość 2 i powiedzieć powiedzmy number razy 10.
Jak widzisz, kod JavaScript jest tutaj
wykonywany natomiast zupełnie poza środowiskiem przeglądarki internetowej
i też niech nie zmyli Cię to, że jesteśmy w edytorze VS Code.
My nie uruchamiamy tego JavaScriptu w VS Code tylko z użyciem node w terminalu.
A w VS Code mamy tylko taką nakładkę na ten właśnie terminal.
Czyli tutaj możesz sobie eksperymentować z kodem JavaScript,
ale jak już też wspominałem w tym kursie,
fakt, że jesteśmy w innym środowisku niż przeglądarka sprawia, że nie mamy np.
obiektu window,
mamy za to inne obiekty, które są specyficzne dla środowiska Node. I to
właśnie różni sam język JavaScript, który i w przeglądarce będzie działał tak samo
i tutaj w node od tego co nam oferuje dana platforma w przeglądarce np.
mamy window czy document, który pozwala nam tworzyć nowe elementy itd.
W Node tego nie mam, bo nie pracujemy zupełnie ze środowiskiem przeglądarki internetowej.
Tutaj z kolei będziemy mieli na przykład moduły i funkcje, które pozwolą nam
odczytywać i tworzyć pliki na dysku komputera.
W przeglądarce nie moglibyśmy napisać skryptu, który zapisałby dowolny plik np.
na pulpicie użytkownika, bo wtedy
moglibyśmy tworzyć wirusy i ktoś gdyby wszedł na taką stronę to nawet by nie
wiedział, że my mu na dysku zapisujemy jakiś plik.
Natomiast z użyciem Node.js ten kod się wykonuje na komputerze albo na serwerze
i jak najbardziej możemy tworzyć i zapisywać
pliki. I wszystko to robimy z użyciem języka JavaScript, ale jak widzisz w dwóch
różnych środowiskach. Będę chciał teraz z tego wyjść.
Piszemy kropka i następnie exit i ten terminal sobie tutaj zostawimy,
ja go tylko wyczyszczę i w katalogu, który mamy
tutaj będę chciał utworzyć plik JavaScript,
jego nazwa jest dowolna, ale jego nazwa index.js. I ten plik będziemy chcieli nie
podłączać do przeglądarki internetowej, ale uruchomić z użyciem node.
Więc jeżeli sobie tutaj wpiszemy console.log, które też w Node.js jest dostępne.
Witaj świecie.
I teraz ten plik będę chciał uruchomić to
będąc tutaj VS Code otworzył mi się w katalogu kurs, jak wpiszę sobie ls albo na
windowsie dir to zobaczę tutaj folder Instalacja środowiska.
Musimy do niego przejść wpisując cd instalacja-środowiska
I teraz jak wpiszę ls albo dir na windowsie widzę ten plik index.
Jeżeli teraz wpiszemy Node i wskażemy na ten plik index.js to Node po prostu
wykona cały ten plik. I zobacz, zobaczyliśmy w konsoli
Witaj świecie.
No i właśnie o to nam chodziło.
Możemy pisać jakieś skrypty
JavaScript korzystając z Node i następnie w
ten sposób je uruchamiać zupełnie poza przeglądarką internetową.
Być może pamiętasz, jak w tym kursie
mówiłem o globalnym obiekcie, w którym w przeglądarce było Window.
Mówiłem wtedy, że w Node takim obiektem jest obiekt Global.
Czyli mamy coś takiego jak global,
możemy sobie go wyświetlić, znowu
tutaj wpiszę node index,
wykonamy ten skrypt.
Tutaj nam się będą jakieś pokazywać
rzeczy, które nie do końca może od razu są czytelne, ale mamy tutaj jak widzisz np.
clearInterval, clearTimeout, setInterval, setTimeout,
to są te rzeczy, które też Ci pokazywałem
i jak widzisz w Node też są dostępne. I wtedy
wspominałem jeszcze, że ustandaryzowano global i window
mówiąc czy w zasadzie wstawiając do
specyfikacji taką stałą globalną, która nazywa się globalThis
i tu możemy sobie porównać czy global to jest to samo co globalThis, uruchommy to,
jak widzisz jest zwrócone true, czyli tak. I w przeglądarce też mamy globalThis, ale
ono kieruje na window, co też Ci już wcześniej pokazywałem.
Na koniec chcę Ci pokazać praktyczny przykład, że z użyciem Node rzeczywiście
możemy zrobić coś innego niż w przeglądarce, czyli np.
w tym katalogu tutaj zapisać sobie jakiś plik.
W tym celu musimy sobie pobrać moduł i Node.js
korzysta z takiego systemu modułów, który nazywa się require.js
i wygląda to tak, że utworzę sobie stałą, którą nazwę fs,
mogę ją nazwać jak chcę i następnie mamy taką globalną funkcję require, w której
podajemy jaki moduł Node.js chcemy sobie wczytać. I te moduły są wbudowane.
Chcemy wczytać moduł o nazwie fs jak File
System i będę chciał teraz z niego skorzystać.
Jeżeli byśmy sobie przeszli do przeglądarki i tutaj do dokumentacji do tej wersji
to możemy sobie zobaczyć, że mamy tutaj wszystko dokładnie opisane i File System
jak wejdziemy to znajdziemy coś takiego jak np.
może wyszukam write file i chcemy właśnie z tej funkcji skorzystać.
Tutaj jest przykład jak z niej korzystać, ale ja Ci to teraz również pokażę.
Czyli możemy napisać fs.writeFile w ten sposób i następnie podać ścieżkę do
pliku gdzie go chcemy zapisać. Więc chcemy go zapisać w tym samym katalogu.
I mamy taką specjalną zmienną, która się nazywa dirname z dwoma podkreślnikami.
Ona nam zwraca jakby pełną ścieżkę do katalogu,
w którym jest ten plik index.js, czyli właśnie tutaj.
I następnie do tej ścieżki chcemy dokleić nazwę pliku, który nazwę hello.txt,
następnie przekazuje się tutaj tekst, który chcemy wstawić do tego pliku np.
Witaj świecie,
i następnie jest taka funkcja, która się wykona
kiedy ten plik się uda albo nie uda
zapisać. Może na chwilę zamknę terminal i ta funkcja otrzyma obiekt błędu.
Jeżeli będzie błąd możemy sobie sprawdzić.
Jeżeli error to w konsoli możemy
wyświetlić po prostu wystąpił błąd i przekazać sobie ten error żeby go
podejrzeć, a w przeciwnym wypadku możemy tutaj napisać zapisano plik. I zobacz.
My się cały czas posługujemy językiem
JavaScript, ale korzystamy z jakiegoś API, które w przeglądarce nie byłoby dostępne.
Czyli jest jakiś obiekt fs,
po kropce odwołujemy się do metody writeFile,
mamy jakąś specjalną zmienną, która nam pozwala odczytać aktualny katalog itd.
I teraz jak wrócę do terminala i wykonam
ten plik czyli node index.js zobacz co się stało.
Mamy tutaj plik hello.txt, którego przed momentem nie było.
I w nim jest napisane Witaj świecie.
Tym przykładem chciałem Ci po prostu pokazać, że Node.js
działa zupełnie poza przeglądarką internetową i oferuje inne możliwości.
Niemniej jednak jeżeli chodzi o syntax,
o zapis, to cały czas posługujemy się znanym nam już językiem JavaScript i wszystkie
wbudowane w języku JavaScript funkcje i mechanizmy będą tutaj dostępne,
natomiast aby tworzyć ciekawe rozwiązania,
będziemy bardzo mocno korzystać z tego API, które oferuje nam dane środowisko.
Czyli w przeglądarce internetowej będziemy
pracować z Obiektowym Modelem Dokumentu, a w przypadku Node np.
z takim modułem jak File System,
ale tych modułów jak mogłeś zobaczyć w dokumentacji jest znacznie więcej.