Nowy Standard JavaScript
10 godz. 43 min · JavaScript · Full-stack i Programowanie
Piotr PalarzWeb DeveloperNa początku dowiesz się jakie nowości pojawiły się w języku, jeśli chodzi o tworzenie zmiennych i stałych. Poznasz dwa nowe słowa let i const, a także dokładnie omówimy ich różnice, względem znanego nam do tej pory słowa var. Następnie poruszymy temat obiektów. Zobaczysz jak nowy zapis pozwoli znaczenie ułatwić nam pracę i sprawić, by kod był bardziej czytelny. W kolejnym rozdziale porozmawiamy o zmianach w funkcjach. Poznasz tzw. arrow functions wraz z poradami, kiedy z nich korzystać, a także z konsekwencjami ich użycia. Zobaczysz również, jak korzystać z domyślnych parametrów. Następną nowością będą operatory rest i spread, które znacząco uproszczą pisanie kodu dla funkcji i tablic. Chwilę później rzucimy okiem na bardzo ciekawy temat, mianowicie na tzw. destructuring. To nowa funkcja języka, która pozwala w łatwy sposób wyciągnąć odpowiednie dane z tablic i obiektów, nawet jeżeli te posiadają kilkupoziomową, zagnieżdżoną strukturę. Zmian doczekały się również ciągi znaków. Poznasz nowy zapis, tzw. template string, a także możliwość wykorzystania funkcji tagujących.
ES6 wprowadza do języka JavaScript zapis klas. I choć na początku wydaje się, że to duży krok w stronę klasycznych obiektowych języków programowania, to jak się przekonasz, jest to w dużej mierze tzw. syntactic sugar, a więc zupełnie nowy, prostszy zapis, a prawie identyczne jak wcześniej działanie, oparte na dziedziczeniu prototypowym. W kursie poruszymy również temat Symboli oraz tego jak z nimi pracować, a chwilę później poznasz iteratory. To konstrukcje ułatwiające iterację, które znacząco upraszczają pracę z kolekcjami danych. Wraz z iteratorami poznasz również generatory, które ułatwiają z kolei tworzenie tych iteratorów. Istotną nowością w ES6 są również natywne Promise. To sposób na rozwiązanie problemu asynchroniczności, który znamy od bardzo dawna w postaci różnych bibliotek. Od teraz jednak Promisy znajdują się bezpośrednio w języku. Nowymi konstrukcjami, które pozwalają pracować z kolekcjami danych, są Map i Set. Dowiesz się jak z nich korzystać, a także do czego są przydatne. W jednym z rozdziałów rzucimy też okiem na tzw. Proxy API. To mechanizm języka, który pozwala na dość niskopoziomowy dostęp do różnych operacji. I choć być może nie jest to coś, z czego będziesz korzystał nad wyraz często, to warto wiedzieć, jakie są nowe możliwości tego API.
Jedną z najlepszych nowości, która zawitała do języka JavaScript wraz z ES6 są moduły. To możliwość dzielenia kodu na wiele plików, z których można pewne wartości wyeksportować, a następnie zaimportować je w innych modułach. Tutaj dowiesz się wszystkiego, co z modułami związane. Zobaczysz wiele sposobów na eksport i import, a także jak pracować z modułami w przeglądarkach internetowych. Kurs skupia się na omówieniu wszystkich najważniejszych nowości w ES6, dzieląc je na rozdziały. Jeden z nich natomiast, poświęcony został omówieniu mniejszych zmian, które znalazły się w specyfikacji. Poznasz w nim np. nowe metody tablic czy ulepszoną współpracę z Unicode.
Specyfikacja EcmaScript 2015 wprowadziła naprawdę bardzo wiele zmian, ale jej twórcy założyli, że od tego czasu każda kolejna wersja specyfikacji będzie pojawiać się co roku. Oznacza to przede wszystkim, że nie będziemy na raz bombardowani aż tak wieloma zmianami, jak w 2015 roku. W tym kursie nie zabrakło zatem omówienia nowości ze specyfikacji ES2016 oraz 2017, gdzie poznasz np. nowe metody dla stringów czy funkcje asynchroniczne.
Kiedy będziesz już uzbrojony w solidną wiedzę z zakresu nowości w ES6, dowiesz się jak w praktyce pracuje się dzisiaj z tym standardem. W jednym z rozdziałów omówimy nowoczesny workflow z użyciem npm i wykorzystamy popularne narzędzie webpack, do pracy z modułami, a także do transpilowania kodu ES6 do wersji ES5. Dzięki temu nowoczesny kod, który napiszemy, będzie mógł być uruchamiany również w starszych przeglądarkach, które nie wspierają najnowszego standardu. Dowiesz się na co zwrócić uwagę, by wszystko działało bez zarzutu.
Zwieńczeniem tego kursu będzie praktyczny projekt, w którym od podstaw wykonamy swoją własną bibliotekę do pracy z Obiektowym Modelem Dokumentu. Będzie ona w działaniu nieco podobna do znanej chyba wszystkim biblioteki jQuery. Na tym przykładzie postaramy się wykorzystać jak najwięcej wiedzy z zakresu ES6 zdobytej wcześniej. Stworzymy metody do pracy z drzewem dokumentu, a więc do wyszukiwania elementów, do tworzenia nowych, do przypisywania im klas, atrybutów czy styli CSS. Nie zabraknie również modułu odpowiedzialnego za współpracę z Ajax. Cały kod utworzymy oczywiście w sposób modułowy, aby bibliotekę można było łatwo rozwijać w przyszłości. Na koniec projekt ten przetranspilujemy do kodu ES5 z użyciem Babel i przetestujemy w starszej przeglądarce Internet Explorer 11, aby upewnić się, że nasza biblioteka działa poprawnie.
Kurs ten jest dla wszystkich osób, które znają już język JavaScript i czują się w pracy z nim swobodnie. Jeśli zatem chciałbyś pracować z nowoczesnym kodem JavaScript, to ten kurs jest zdecydowanie dla Ciebie. A może masz zamiar poznać framework Angular lub bibliotekę React? Tam również wykorzystywany jest najnowszy zapis ES6, więc wiedza ta będzie naprawdę pomocna. Z solidną wiedzą z zakresu EcmaScript 6, bez trudu pozostaniesz na bieżąco z każdą kolejną edycją tej specyfikacji.
zobaczyłeś już w jaki sposób webpack pozwala nam bundlować kod czyli tworzyć jeden
plik z wielu różnych modułów i w ten sposób możemy obejść ten problem że nie wszystkie przeglądarki
wspierają moduły być może w momencie kiedy oglądasz ten kurs jest
już lepiej ale wtedy kiedy ja ten kurs nagrywam taka jest praktyka że pracujemy w
nowoczesnym kodzie tworząc sobie moduły ale później to wszystko bundlujemy webpack
może dla nas zrobić jeszcze bardzo wiele innych rzeczy ale w tym kursie już ich poruszać nie będziemy
niemniej jednak mamy jeden problem jeżeli przeglądarka w której uruchomimy nasz kod
nie wspiera es6 to na przykład klasy będą dla niej zupełnie obce
zauważyłeś że webpack nic z tym nie zrobił ale możemy to również
zrobić czyli możemy przetranspilować nowoczesny kod do kodów w standardzie es5 ecmascript 5
jest bardzo szeroko wspierane więc możemy założyć że wszystkie przeglądarki wspierają es5
od wielu lat dlatego skorzystamy sobie z takiego narzędzia które nazywa się babel
i znajdziesz je pod takim adresem i ono pozwoli nam przetranspilować ten kod
es6 do es5 gdybyśmy przeszli tutaj do try it out to
możemy sobie spróbować coś wpisać zauważ, że tutaj mamy wpisaną klasę person
w nowoczesnym kodzie i widzimy jak to jest transpilowane do kodu w standardzie
es5 czyli tutaj babel dodaje sobie jakieś swoje pomocnicze funkcje i tak
dalej ale nie jest to dla nas istotne gdybyśmy skorzystali na przykład z let czyli
powiedzmy let zmienna równa się 0 zauważ że babel zamieni to
na var bo na przykład nie jest w stanie zamienić let na jakiś
inny zapis żeby nie było tych rzeczy które są związane z var
czyli innymi słowy ja ci pokazywałem w tym kursie jaka jest różnica w
używaniu const czy let gdybyśmy tutaj zrobili const zmienna równa
się na przykład zero musielibyśmy to nazwać inaczej okej
to też zostanie do zamienione na var czyli to jest jedna z tych rzeczy
których babel nie potrafi zasymulować bo nie da się tego zrobić w es5 niemniej
jednak i tak to będzie działać w większości przypadków dokładnie tak samo i teraz
to co jest istotne na takiej stronie możemy zobaczyć jakie wsparcie dla ecmascript
6 i w przeglądarce w której teraz jestem to jest 97% ale
w przypadku narzędzia babel jest to już 71% i to wynika
z tego że właśnie część rzeczy z ecmascript 6 nie da się zasymulować w ecmascript
5 czyli babel sobie wtedy z tym nie poradzi i warto mieć to na uwadze
natomiast większość rzeczy takie jak klasy funkcje strzałkowe destructuring
czy nawet generatory czy iteratory tak samo template stringi
i tak dalej bez problemu można zamienić na kod w zapisie ecmascript 5 teraz
będę chciał ci pokazać jak możemy to zrobić z użyciem webpacka i przejdźmy sobie do
katalogu 66 i mamy tutaj już plik package json
w którym mamy webpack i http server to co w lekcji poprzedniej i dodatkowo mamy
również ten plik index jak widzisz tutaj html i
też to co mieliśmy wcześniej czyli tych kilka modułów już wiesz że webpack
nam je fajnie za pomocą tego pliku złoży w 1 moduł bundle js
natomiast nie zamieniam tego na standard ecmascript 5 dlatego teraz będziemy
chcieli babel sobie zainstalować i przejdę do terminala jestem w katalogu 66
start i tutaj mamy właśnie plik package json i teraz będziemy chcieli
sobie kilka rzeczy zainstalować i możemy wpisać npm install
save dev i będziemy chcieli
zainstalować sobie babel core musimy to wpisać w ten sposób i po spacji
można dodać kolejne moduły aby na raz je zainstalować napiszemy sobie
babel loader jest to taki loader dla webpacka, który sobie z tym poradzi on
potrzebuje mieć właśnie babel core jeszcze potrzebujemy zainstalować sobie jakieś preset
ja chciałbym kompilować nasz kod do standardu w 2015 roku więc
napiszemy sobie babel preset es 2015
natomiast może znaleźć też inne presety które pozwolą ci wspierać
też te nowsze rzeczy z nowszych specyfikacji ja jednak zainstaluję sobie ten 2015
najbardziej stabilny wciskamy enter i to powinno się zainstalować i dodać
do pliku package json więc zaraz to powinniśmy tutaj mieć jeśli byśmy sobie zerknęli tak
też się stało i dzięki temu będziemy mogli z tego skorzystać już w pliku webpack
config przejdziemy sobie tutaj i w webpacku w tym pliku konfiguracyjnym
możemy podać coś takiego jak module bardzo dokładnie
to tłumaczę wspomnianym wcześniej już w warsztacie który jest na eduweb.pl i jest
to obiekt i w tym obiekcie podajemy sobie kolejny klucz które nazywa się
rules i tym razem jest to tablica w tej tablicy podajemy sobie obiekty zauważ
że cały czas operujemy w języku JavaScript który będzie wykonywane w środowisku node każdy
taki obiekt to jest jedna reguła i teraz chciałbym aby tylko pliki javascriptowe
były przepuszczone przez loader który zaraz sobie tutaj utworzymy chodzi
o to że jeżeli webpack analizuje sobie takie importy i widzisz że importujemy
plik javascriptowy to może go przepuścić przez loader który sobie skonfigurujemy
bo w webpacku co ciekawe można importować również inne pliki na przykład pliki html co normalnie w javascripcie
w takim zapisie nie jest poprawne dlatego musimy tutaj powiedzieć webpackowi do
jakich plików chcemy zaaplikować ten loader i robimy to za pomocą wyrażenia
regularnego w takim kluczu test tutaj wystarczy że wpiszemy sobie że
chcemy wszystko co kończy się na js i dzięki temu każdy taki
plik przez ten loader będzie przepuszczony natomiast widziałeś że mamy zainstalowany
taki plik jak node modules i jeżeli robiliśmy sobie tutaj w scripts co
ci już pokazałem na przykład import jquery from jquery to
importowane jest to z katalogu node modules i nie chcę żeby te rzeczy z katalogu node modules
były przepuszczone przez babel bo one już zakładam że są odpowiednio przetranspilowane
dlatego musimy sobie tutaj jeszcze coś wykluczyć wpiszemy sobie exclude i tu
można podać wyrażenie regularne dla ścieżek które mają być wykluczone i tutaj wpiszemy właśnie node modules
czyli jeżeli coś ma w ścieżce node modules nie chcemy przez ten loader tego
przepuszczać i na koniec jeszcze podajemy coś takiego jak use jest
to obiekt w który wpisujemy loader i właśnie babel loader który przed momentem
zainstalowaliśmy webpack go sobie znajdzie odpowiednio w katalagu node modules i następnie
jeszcze options to jest obiekt w którym podajemy różne opcje jedną
z nich będzie presets i tutaj podajemy preset es 2015 który
też zainstalowaliśmy więc tak będzie wyglądała konfiguracja w pliku webpack
config troszkę musieliśmy napisać ale to sprawi że wszędzie gdzie robimy import
jakiegoś pliku js to będzie on odpowiednio zamieniane na standard ecmascript 5
więc zobaczmy to sobie przejdziemy w to miejsce i wpiszemy npm run bundle
aby webpack nam to wygenerował pojawił się błąd z tego powodu że zauważ
nie mamy zainstalowanego webpacka kiedy zaczynaliśmy tę lekcje nie było katalogu node modules
zainstalowaliśmy sobie tylko te trzy zależności ale te
się automatycznie nie zainstalowały dlatego że wystarczy wpisać npm install
i powinniśmy to zrobić na początku wszystko co jest w pliku package json się wtedy
zainstaluje i powinno to poprawnie działać okej sprawdźmy
wpisze npm teraz run bundle i webpack to
powinien nam wygenerować tak też się stało czyli wszystko jest okej i teraz sobie zajrzyjmy
do tego pliku w dist bundle zauważ że nadal
mamy tutaj te webpackowe rzeczy ale spróbujmy zobaczyć czy mamy gdzieś klasę zauważ
że nie mieliśmy klasę employee a teraz tutaj babel dodał sobie swoje
rzeczy takie jak inherits i tak dalej i co ciekawe wszystko to jest w
standardzie ecmascript 5 teraz zapisane zauważ że mieliśmy template string
który w es5 nie jest wspierany więc został on zamieniony poprawnie na taki
zwykły string i zkonkatenowany z innymi wartościami to może
to wygląda strasznie ale dla nas nie jest to istotne jest to poprawne kod ecmascript
5 zauważ że nigdzie nie ma klasy ani takich innych rzeczy które były
w zapisie ecmascript 6 i teraz spróbujemy sobie wpisać np
tutaj npm run server aby uruchomić nasz przykład
i spróbujemy go podejrzeć w przeglądarce otwórzmy
sobie w konsoli i zobaczymy nazywam się Jan Kowalski i pracuję jako programista czyli
nasz kod napisany w nowym standardzie ecmascript 6 został automatycznie
zamieniany na es5 i w ten sposób możemy dużo wygodniej pracować natomiast pokażę
ci jeszcze jeden plik możemy tutaj uruchamiając z webpacka w pliku package json dopisać
mu flagę w jak watch i on wtedy będzie nasłuchiwał na zmiany w plikach
i wykonywał bundle od nowa więc przejdźmy sobie tutaj serwer
mam uruchomiony więc go nie zatrzymuje ja sobie otworzę nową kartę i automatycznie
jestem w tym samym katalogu jeżeli u ciebie będzie inaczej musisz do niego przejść i tutaj
zrobimy sobie npm run bundle żeby utworzyć nowy bundle i webpack
teraz jak widzisz nie zakończył widzimy że czeka na zmiany więc
jeżeli teraz sobie przejdziemy do dowolnego pliku na przykład tutaj employee say
hello i dodam do tego trzy wykrzykniki zapisze webpack
nam to wygeneruje od nowa i jeśli odświeżę to widzimy że to się zmieniło w ten
sposób możemy sobie wygodnie pracować natomiast sam workflow z webpackiem można jeszcze
dużo bardziej ciekawiej zrobić żeby jeszcze lepiej się pracowało jak
jednak widzisz o to chodzi żebyśmy mogli pisać nowoczesny kod ale i żeby on
był zamieniony na ten starszy kod dla tych przeglądarek które nie wspierają es6
na koniec pokażę ci tylko jedną rzecz która tutaj będzie problematyczna
wyobraźmy sobie że chcemy skorzystać z na przykład setu napiszę
sobie const s równa się new set wiemy że
jest to zapis ecmascript 6 teraz sobie zapiszę odświeżam
i wszystko tutaj działa poprawnie ale zajrzyjmy sobie do pliku bundle
i wyszukajmy sobie new set okaże się że
nie zostało to zamienione jedynie const zostało zamienione na var ale samo new set
nie zostało na nich zamienione i w mojej przeglądarce działa bo ona wspiera sety ale
gdybyśmy to uruchomili w starszej przeglądarce mielibyśmy błąd że set nie jest dostępny
no i to jest jeden z problemów a więc nie wszystko zostało odpowiednio zamienione bo o
ile sam syntax jest zamieniony na es5 o tyle już te wbudowane
typy nie dlatego musimy sobie skorzystać z jeszcze jednego pluginu
będzie to babel polyfill i zrobimy to w lekcji kolejnej