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.
Poprzednią lekcję zakończyliśmy na tym, że powiedziałem, że fajnie, że ten bundler takim
jakim jest Snowpack tak nam zmienia ten kod, że przeglądarka go rozumie i te importy tam
poprawnie działają, bo są one wspierane w przeglądarkach internetowych,
natomiast czasami problemem jest to, że
możemy mieć aplikacje gdzie jest naprawdę mnóstwo plików
i jeżeli będziemy chcieli wszystkie te pliki
w taki natywny sposób w przeglądarce serwować, to ona wczytuje jeden plik,
widzi tam odwołanie, import do innego pliku, pobiera kolejny, kolejny, kolejny
i może być tak, że np. kilkadziesiąt plików będzie musiała
przeglądarka pobrać, a będzie to wolniejsze niż gdyby te wszystkie pliki
połączyć w jeden plik i zaserwować go do przeglądarki.
Dlatego z użyciem Snowpacka możemy wykonać tak zwany produkcyjny build i wskazać mu
tam, że chcemy właśnie te pliki odpowiednio połączyć.
A więc do pracy,
czyli podczas developmentu nie ma żadnego
problemu, że te pliki będą serwowane w taki natywny sposób, że przeglądarka
będzie sobie sama je pobierać wszystkie po kolei
dlatego, że będzie to szybkie, będzie to
wydajne i jak najbardziej będzie ok, bo pracujemy lokalnie,
natomiast jak chcemy stronę już uruchomić na serwerze, to najlepiej będzie to
odpowiednio zoptymalizować i przy okazji też zminifikować.
Więc uruchomimy sobie może najpierw to co tutaj
mamy, czyli przejdę do katalogu build produkcyjny i możemy jeszcze raz z użyciem
npx snowpack dev uruchomić sobie ten serwer developmencki,
on nam się tutaj otworzy,
no i ta nasza strona działa.
Ale tak jak wspomniałem patrząc tutaj przeglądarka wczytuje ten plik o typie
module, w nim ma import do kolejnego więc go pobiera,
w nim mogą być kolejne,
tutaj też ich może być więcej itd.
Dlatego teraz skonfigurujemy sobie Snowpack tak, żeby nam wykonywał build produkcyjny.
Podamy tutaj coś takiego jak optimize
i będzie to obiekt, gdzie napiszemy bundle true właśnie po to, żeby nam zbundlowało
wszystkie te pliki do jednego pliku i następnie minify true.
Ale może to zrobimy za chwilę.
Na razie zróbmy sobie false.
I teraz wykonamy polecenie zatrzymując ten
serwer Control c npx snowpack build. Tyle wystarczy i snowpack nam to
wszystko ładnie spakuje i utworzy nam katalog build.
I właśnie w tym katalogu będzie gotowa nasza aplikacja.
Jak widzisz tak to wygląda i możemy ten plik index.html
sobie uruchomić.
My tutaj mamy uruchomiony z VS Code
już wcześniej ten serwer developmencki czyli Live Server,
więc mogę tutaj przejść do build produkcyjny i po prostu do katalogu build
i jak widzisz nasza strona działa dokładnie tak samo, ale jak sobie
podejrzymy co jest w środku to okazuje się, że tutaj jest ten plik main.js.
i wejdźmy do niego i że on wygląda tak. Tutaj zostały dodane właśnie z użyciem
tego Snowpacka różne rzeczy, między innymi cały ten Luxon, z którego korzystaliśmy
został tutaj wstawiony, a więc wszystko znajduje się teraz w jednym pliku.
Jak widzisz całkiem spora biblioteka jeżeli chodzi o ten luxon
i na końcu gdzieś będzie nasz kod, który z tego luxona korzysta.
Jest dokładnie tutaj. Więc akurat ta biblioteka nie była dobrym pomysłem, aby
ją dołączać do strony tylko po to, żeby wyświetlić prostą datę,
niemniej jednak to był tylko przykład jak
możesz zainstalować sobie coś z użyciem npm.
No i bundlowanie polega właśnie na tym, że to wszystko zostało wstawione do jednego
pliku, który powinien być szybciej pobrany przez przeglądarkę niż wiele plików.
Natomiast możemy sobie tutaj dodać jeszcze
jedną opcję, właśnie tą, którą ustawiłem na false.
Ustawimy ją na true, to jest minify
i jak jeszcze raz wykonamy sobie taki build to teraz wszystko będzie zminifikowane.
Jeżeli byśmy podejrzeli ten plik JavaScript,
który tutaj jest, to on jest dla nas już nieczytelny, ale dla
przeglądarki on działa tak samo, bo w języku JavaScript nie ma znaczenia gdzie
sobie zrobisz jakieś odstępy, spacje, wcięcia.
To wszystko co robiliśmy tutaj robiliśmy dla naszej wygody, ale gdybyśmy wszystko
zapisali w jednej linijce, też ten kod działałby tak samo.
A dzięki temu, że jest zminifikowany, to po
prostu on mniej zajmuje, więc szybciej się wczyta.
No i teraz jeżeli raz jeszcze sobie tę
stronę uruchomimy, zobacz, ona znowu działa tak samo,
ale tym razem serwujemy już tutaj plik
zminifikowany. Dokładnie tak to wygląda.
A więc warto pracować sobie z użyciem tego serwera z Snowpack, a później wykonać
build i pliki z katalogu build wstawić na serwer.
Wszystko będzie zoptymalizowane i będzie działać bardzo szybko.
Na koniec pokażę Ci jeszcze, że możemy tworzyć coś takiego co nazywa się npm
script, bo do tej pory nie mogliśmy wpisać po prostu Snowpack i np.
build, bo musielibyśmy Snowpack zainstalować globalnie.
Jest to też możliwe,
można wpisać npm install global snowpack, ale ja wolę te rzeczy instalować sobie lokalnie
dla każdego projektu, więc mamy je zainstalowane lokalnie, czyli po prostu w
katalogu node_modules, ale w pliku, który mamy tutaj, czyli package.json
można tworzyć tak zwane skrypty.
Jeden z takich skryptów automatycznie został tutaj utworzony.
Możemy go spokojnie usunąć całkowicie i zaraz wstawimy nowy.
Chodzi o to, żebyśmy nie musieli wpisywać tego npx,
następnie snowpack dev to ustawimy sobie tutaj dwa skrypty.
Jeden nazwiemy start i tutaj się po prostu podaje komendę,
którą jakby w terminalu chcesz wykonać, zaraz Ci pokaże jak to start w ogóle uruchomić.
Natomiast możemy się tutaj bezpośrednio odwoływać do rzeczy, które są w node_modules.
Więc mogę powiedzieć snowpack i następnie dev. To był ten serwer developmencki.
Nie trzeba tego tutaj poprzedzać tym npx i jak to uruchomimy
za moment to start, to npm wie, że tego Snowpacka
ma sobie poszukać właśnie w node-modules. Czyli to
musi być po prostu zainstalowane wcześniej z użyciem npm install.
Natomiast drugim skryptem, który tutaj wstawimy jest build.
Możesz go nazwać jak chcesz
i wpiszemy tutaj snowpack build, czyli to co już uruchamialiśmy.
I teraz jak się uruchamia te skrypty?
Jeżeli skrypt nazwiesz start to można go tutaj uruchomić wpisując npm start.
Musisz być oczywiście w tym katalogu, w którym znajduje się plik package.json.
Natomiast wszystkie inne skrypty jak mają inną nazwę niż start to uruchamia się je
poprzedzając je słowem run czyli npm run i następnie nazwa czyli np.
build.
Jeżeli coś takiego sobie wykonamy zostanie automatycznie wykonany cały build tej
aplikacji, a jeżeli chcielibyśmy nad nią pracować to wpiszemy po prostu npm start.
Wtedy nie trzeba wpisywać tego run, ale
też można to dopisać, ale jest to taki skrót,
dlatego te skrypty, z których najczęściej korzystasz to wstaw sobie do start.
Czyli jak rozpoczynamy pracę nad naszym projektem wpiszemy npm start, uruchomi się
serwer, przechodzimy od razu do przeglądarki, możemy pracować nad naszą
stroną i co ważne za każdym razem jak coś tutaj zmienimy np.
jakbym tutaj dodał coś takiego i zapisał strona będzie odświeżana
jak widzisz od razu wszystko na stronie widać.
Jak uznamy, że skończyliśmy pracę nad tą
aplikacją zatrzymujemy ten serwer Control C wpisujemy npm run build.
Aplikacja jest budowana, wszystko jest
fajnie bundlowane do jednego pliku no i mamy to w katalogu build.
Możemy to wstawić na serwer.
Nasza praca jest już wykonana.
Jeżeli chodzi o bundlery kodu takie jak
właśnie Snowpack, to one pozwalają nam jeszcze na wiele innych rzeczy z użyciem pluginów.
Na przykład możemy w plikach JavaScript
importować sobie kod CSS, który następnie jest wyciągany i wstawiany do osobnych
plików, które możemy podłączyć na stronie np.
tutaj. Bardzo wiele możliwości oferują bundlery,
ale już nad nimi nie będziemy się pochylać w tym kursie.
W razie czego poczytaj sobie jeszcze
dokumentacje Snowpack, ale myślę, że na początek to i tak wystarczy do tego, żebyś mógł w
nowoczesny sposób pracować i po pierwsze tworzyć własne moduły i je tutaj
importować, a o tym sobie powiemy dokładnie w kolejnej lekcji,
ale po drugie co jest bardzo ważne
importować moduły zainstalowane z użyciem npm.
Jak widzisz w przeglądarce dzięki temu
bundlerowi i dzięki pracy, którą on wykonuje transformując te pliki
wszystko to zadziała bez żadnego problemu.