Prosty i Nowoczesny Framework dla Vue.js
7 godz. 2 min · Vue.js · Full-stack i Programowanie
Wojciech PołowniakSr. Fullstack EngineerW tym projekcie tworzyć będziemy praktyczny projekt - klona Wikipedii! Minipedia pobierze dane z prawdziwego źrodła danych, zewnętrznego API WikiMedia - będzie łudząco podobna do oryginału oraz współdzieliła najważniejsze funkcjonalności, takie jak dostarczanie treści w różnych wersjach językowych, możliwość wyszukiwania artykułów, czy pobieranie najpopularniejszych wpisów dla danego języka. Stworzymy także podstronę wyświetlającą za każdym razem losowy artykuł w danej wersji językowej.Zobaczysz też, jak dokonać migracji ze statycznej strony HTML na Nuxt - oraz jak tworzyć przykładowe komponenty podczas tego procesu.Dzięki temu wszystkiemu, dowiesz się jak wykorzystać nabytą wiedzę w praktyce.
Dzięki Nuxtowi dowiesz się jak optymalizować Twoje strony www z duchem idei progressive enhancement, dostarczając coraz to lepsze doświadczenia dla swoich użytkowników oraz tworząc aplikację napisaną w 100% w JavaScript, która będzie działała nawet wtedy, gdy użytkownik jawnie wyłączy go w przeglądarce! To wszystko za SSR (Server Side Rendering), dzięki któremu treści będą gotowe do konsumpcji już przy wstępnej, pierwszej odpowiedzi z serwera WWW.Oczywiście, ma to swoje implikacje na wydajność naszej aplikacji - sprawiając że Lighthouse czy optymalizacja pod SEO staje się coraz prostsza!
Czymże jest ekosystem danego frameworka bez wsparcia społeczności! Dlatego podczas tego kursu nauczysz się instalować i wykorzystywać różne pluginy i moduły, które zaoszczędzą Ci dużo czasu. Dowiesz się też, jak tworzyć własne moduły - które rozszerzą działanie Twojej aplikacji Nuxt w sposób czysty i zarządzalny.
Nuxt jest frameworkiem w którym pracujemy zarówno po stronie front-endu, jak i back-endu. W związku z czym, stworzymy swoje własne API (bazujące na express.js) które będzie pewnego rodzaju pośrednikiem pomiędzy API WikiMedia oraz Twoją aplikacją internetową.
W tym kursie, dowiesz się także jak tworzyć swoje własne Middleware'y - czyli fragmenty kodu wywoływane pomiędzy przechodzeniem między stronami, czy podczas innych zapytań HTTP.Dodatkowo, zobaczysz jakie narzędzia daje nam Nuxt aby tworzyć progresywne aplikacje internetowe, oferując wsparcie dla takich funkcjonalności jak np. animacje między przejściami pojedynczymi podstronami naszego serwisu.
Tajemnicze i18n - czyli numeronim odpowiadający angielskiemu słowu "internalisation" - odnosi się w kontekście web developmentu do tłumaczenia danych na różne języki. Podczas realizacji projektu Minipedii, nie tylko wykorzystamy standardowe podejście do tłumaczeń stałych elementów naszego interfejsu użytkownika, ale także przetłumaczymy same dane zwracane z API, wykorzystując inną wersję językową w zależności od preferencji użytkownika!
Poznasz też kilka ciekawych pluginów i rozwiązań dotyczących optymalizacji pod SEO - poza faktem, że podejście spełniające intencje użytkownika jest najlepszym, co możemy zrobić - pluginy generujące nam mapę stron automatycznie na podstawie zadeklarowanych przez nas podstron, czy generatory danych jsonld pomogą w pozycjonowaniu Twojej wydajnej aplikacji jeszcze wyżej w hierarchii wyszukiwarek.
Aby móc efektywnie korzystać z tego kursu, powinieneś posiadać średnio zaawansowaną wiedzę z kategorii Front End, z naciskiem na umiejętność posługiwania się JavaScriptem oraz solidne podstawy NodeJS. Konieczna jest znajomość Vue, jako że Nuxt jest frameworkiem korzystającym z niego u swoich podstaw. Jeśli czujesz się dość swobodnie w wyżej wymienionych aspektach web developmentu, ten kurs będzie idealny dla Ciebie.
W tej części kursu.
Skupimy się na programowym użyciu Nexta.
I w tej konkretnej lekcji opowiem troszkę o tym, jak może on zostać wykorzystany do
renderingu, czyli komendy next generate next rate.
Jest to taka.
Komenda, którą możemy wywołać sobie tutaj przez npm run.
Generate albo.
Jeśli mamy faktycznie nexta
zainstalowanego to czy nawet będzie właściwością właśnie w taki sposób czyli.
Generate i obie.
Komendy zrobią dokładnie to samo.
Ale zanim je odpalimy musimy skonfigurować.
Troszkę nasz tak skonfiguruje.
Czyli.
To co musi się stać to.
Koniecznie musimy ustawić.
Target naszej aplikacji na static, aby
powiedzieć aplikacji, że będziemy statycznie generować tabliczki.
No i następnie w opcji Generate wskazać druty.
Które nie są jawnie wskazane.
Czyli jeśli sobie tutaj powiedzmy chwilowo to komentujemy.
Ja uruchomię next right?
Jak ktoś buduje serwer to wtedy to odpalę.
Potrzebujemy równolegle uruchomić serwer, ponieważ nasze API jest
uruchamiane wewnątrz Nexta, w związku z czym jeżeli nie będziemy mieli
uruchomionego równolegle npm dev i uruchomimy npm
range ride czy next generate, to wtedy nasze podstrony niekoniecznie się
wygenerują, bo mają zależność właśnie na API, które nie będzie chodziło.
Więc klikając teraz next generate
dostaniemy tutaj troszkę informacji co się dzieje.
Widzimy, że buduje się to dla zarówno serwera jak i klienta.
Mamy tutaj widok.
Chwilkę to może zająć.
Nie powinna.
Potrwać to jednak zbyt.
Długo i to co się stanie to
wypluje nam pliki w katalogu dist, które będą plikami.
Statycznymi, plikami HTML.
Czyli dokładnie takimi samymi, które przenosiliśmy początkowo do samego Nexta,
dzięki czemu będzie można w tani i wydajny sposób.
Hostować je na zewnętrznym serwerze WWW
bez konieczności uruchamiania całego serwera nowego.
Jedyny problem. Z pendrivem jest taki.
Że jeżeli dane się zmienią, no to
oczywiście pracujemy już wtedy na statycznych pliki html,
więc nie jest to idealne rozwiązanie, ale jest ono wydajne i jeżeli chcemy je np.
periodycznie aktualizować, to znaczy raz na jakiś czas.
To wtedy mamy taką pewność, że nasze dane są aktualne w miarę.
Nie są to.
Dane w stu procentach na.
Żywo, ale są w miarę.
Zaktualizowane do tego.
Co się faktycznie dzieje.
No i są.
Wydajne, bo są faktycznie plikami HTML.
W związku z czym zobaczmy co się dzieje w katalogu dist.
On jest tutaj wytwarzany, bo oczywiście nie jest 15.
I widzimy, że tutaj.
Mamy.
Wszystkie nasze ruchy Play logi.
Tutaj możecie zauważyć, że error jest Fighting Register, chociaż my tutaj nic
nie podaliśmy, że jakie są raty w naszej aplikacji.
W związku z czym można dojść do wniosku.
Słusznego zresztą.
Że sam wykrywa.
Które ścieżki
są używane przez naszą aplikację na podstawie tego co jest zainfekowane.
I dlatego też.
Znalazła się tutaj nam strona register.
Która jak pamiętamy prowadzi do nieistniejącej strony.
Wyświetla się komunikat o błędzie pattern
found i next generic faktycznie też to wykrywa, więc.
Docelowo powinniśmy oczywiście pozbyć się.
Martwych linków, aby nie tracić czasu zarówno maszynę jak i po
prostu mieć bezpieczny, przewidywalny routing w naszej aplikacji.
No ale widzimy, że nie wygenerowała nam się niestety nasza strona.
Z Januszem Kurczakiem czy z Batmanem.
I to dzieje się dlatego.
Ponieważ nigdy nie linkujemy do tych
stron, bo nie mamy informacji jakie strony na Wikipedii są dostępne.
I właśnie wtedy przychodzi.
Nam na ratunek generate z configure jest.
I aby zadeklarować takie VT musimy do.
Generate, która jest obiektem.
Przekazać props. I to jest po.
Prostu tablica stringów.
Które są ścieżkami.
Które chcemy faktycznie wyrenderować.
Jeśli chcielibyśmy np.
wyrenderować sobie informacje o Januszu.
Kurczaku.
O Batmanie.
Tutaj skopiuj.
Czy o Hiszpanii. No to w tym.
Momencie uruchamiając Next Generation. Musimy poczekać.
Oczywiście aż się przewiduje nam serwer, żeby mieć dostęp do portu 8000 i do
naszych API zadeklarowanych wewnątrz katalogu API.
I w tym momencie uruchamia Next Generation.
I możemy zobaczyć nawet jak na żywo tutaj te pliki się generują.
Za chwilę powinny nam się pojawić tutaj.
Zakładka z katalogiem wiki i wewnątrz nich.
Te trzy waluty Janusz Korczak, Batman oraz Hiszpania.
To oczywiście może troszkę trwać w zależności od tego ile mamy produktów.
Od czego zależą.
My wiemy, że dla każdego z tych altów musimy pobrać osobne wpisy z Wikipedii,
więc to tym bardziej będzie zajmowało troszkę czasu.
Ale efekt jest tego warty, ponieważ mamy.
Faktycznie statyczne pliki, które. Są w jakiś sposób nawet.
Mini pikowane przez nas czy nawet.
I tutaj zobaczymy, że o właśnie się wyrenderować.
Strona wiki dalej to na razie stare niestety nam tutaj mówi, że nie istnieje.
Ale jak wejdziemy w. Wiki to mamy wygenerowane 3 katalogi.
Batman, Janusz Korczak i Hiszpania. I jak wejdziemy w.
Każdy z tych plików to mam plik index. HTML.
Który zawiera wszystkie potrzebne style.
Oraz wszystkie informacje, które zostały
zawarte na faktycznej stronie internetowej.
Czyli możemy sobie tutaj poczytać
jakieś różne fakty o Hiszpanii już w naszym samym systemie.
Jeśli chodzi o next gen jest to dosyć nowa właściwość jeżeli chodzi o nexta.
Ona została wprowadzona bodajże w wersji 2, 14 i Next.
Czy jest też przebudowywany.
Z myślą o tym, aby
ta generacja plików była jeszcze prostsza i jeszcze wydajniejsza?
W związku z czym. Da się to już teraz.
Zrobić.
Ale różne fajne.
Rzeczy są na horyzoncie tego co będzie się działo w Trójce.
Więc to, co chciałbym abyście wynieśli z tej lekcji jest to, że możemy.
Wywołać NPM run generate bądź next
generate w naszym katalogu, gdzie faktycznie posiadamy.
Nexta i aby zadeklarować produkty.
Które nie są niestety. Wykrywane.
Dynamicznie, ponieważ nie są podlinkowane.
Możemy wykorzystać właściwość Generate. By.
Przekazać tutaj wszystkie ścieżki, które chcemy mieć.
Wygenerowane. No i obowiązkowym.
Jest również target static.
Dzięki któremu na warstwie i może wyrenderować właśnie te wszystkie pliki.
W kolejnej lekcji opowiem o tym, jak używać.
Nexta programowo, to znaczy faktycznie.
W kodzie źródłowym wywoływać metody na necie, które będą.
Korzystały z naszego obecnego.
Konfigu i dzięki którym będziemy. W stanie np.
. Tworzyć dodatkowe.
Serwery na tym samym porcie.
Zmiany wprowadzone w lekcji · 7 min
diff --git a/24/minipedia/nuxt.config.js b/24/minipedia/nuxt.config.js
index f948490..017a84d 100644
--- a/24/minipedia/nuxt.config.js
+++ b/24/minipedia/nuxt.config.js
@@ -1,5 +1,9 @@
export default {
dev: process.env.NODE_ENV !== 'production',
+ target: 'static',
+ generate: {
+ routes: ['/wiki/Janusz%20Korczak', '/wiki/Batman', '/wiki/Spain']
+ },
serverMiddleware: [
{
path: '/api',