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 poprzedniej lekcji stworzyliśmy nasze pierwsze linki i dzięki nim jesteśmy w
stanie nawigować się po naszej stronie w taki sposób, że jest on zgodny z duchem.
I teraz ten duch Progressive Enhancement pociągniemy dalej na zasadzie takiej, że
stworzymy animacje przejść między naszymi stronami wewnątrz tego samego layoutu.
Czy jeśli wejdziemy na dokumentację jak ta.
Tutaj jest sekcja Transition.
I generalnie jest taka zasada, że
mamy domyślnie ustawione transition na karcie i nie musimy tego deklarować,
jeżeli chcemy zrobić jakąś customowe tradycje.
Bo może być taka potrzeba, no to wtedy możemy wykorzystać sobie tutaj
transition name w naszych komponentach i tak to definiować.
Ale możemy też po prostu wykorzystać gotowe style w tym momencie, które są
gotowe i po prostu zmodyfikować ich wartości.
Czyli przejdziemy do naszego layoutu default.
Tutaj do lekcji 22.
Tutaj wychodzimy z założenia, że tylko ten layout będzie miał takie tranzyty.
Jeśli chcielibyśmy, aby każdy z naszych layoutów miał taką samą tradycję, wtedy
możemy użyć właśnie tego pola globalnego na CSS zdefiniowanego w configu.
Jest. Tutaj mamy sekcję CSS i możemy ją sobie
tutaj umieścić wewnątrz naszych assets powiedzmy.
Global Access.
I tutaj wklejam te style.
Powiedzmy, że będziemy chcieli mieć wsparcie dla różnych.
Layoutów dalej trzymając się tej samej pozycji.
Więc wpisujemy assets i global kropka CSS.
Co się nam powinno tutaj załadować?
I to oczywiście zapiszemy.
I generalnie zasada jest taka, że.
Na nazwie danego patcha, który domyślnie jest ustawiony na home.
Mamy FX Interactive i Live Active,
więc jeśli chcielibyśmy aby dana strona miała translację, no to musimy.
Ustawić tutaj transition na właściwości
których chcielibyśmy, aby zostały animowane.
My to tak sobie wstawimy, ale dlaczego nie?
Nie jest to może najwydajniejsze, ale na nasze potrzeby wystarczy jak najbardziej.
I ustawimy sobie transakcję liniową albo i nie.
A jeśli chodzi o CSS a to zapraszam do innych moich kursów z tym związane.
Tam skupiamy się na dobrych praktykach związanych z procesem.
No i według tej tranzycji generalnie to co się powinno dziać, jeżeli to zapiszemy,
będziemy mieli taki pół sekundowy animacje przejścia z przeźroczystości na nie,
przeźroczystość i zobaczmy czy to faktycznie działa.
Czyli na Robin.
Register i to jest chyba domyślna
animacja, więc jeśli sobie ją zmienimy powiedzmy na.
Powiedzmy transport.
I dajemy tutaj 7 sekund.
Transform ustawimy na skalę 0.
Zapiszemy.
Zobaczymy co się wydarzy.
Nie widać tutaj efektu, prawdopodobnie
dlatego, że nie ma tutaj tej wartości domyślnej.
Transform scale 1.
Zobaczmy czy to coś zmieni.
Niestety nie zadziałało.
Zobaczmy o co tutaj może chodzić.
Całkiem możliwe, że powinniśmy mieć domyślną.
Nazwę naszego page'a tutaj.
No właśnie wydaje mi się, że to jest problemem, że niekoniecznie jest to home,
tylko page interactive, bo my nawiguje pomiędzy konkretnymi flagami.
Zobaczmy Register I faktycznie teraz to działa.
Nie jest to najfajniejsza animacja.
Szczerze mówiąc, nie wiem, czy chciałbym,
aby strony, które odwiedzam robiły tego typu przejścia.
Moglibyśmy może spróbować zrobić jakiegoś
translate w prawą stronę, tak jak widzimy tutaj.
Nawet w momencie kiedy to znika, to nowy
page już nam się pojawia, więc może zostańmy tutaj przy
domyślnym opcji, ale jesteśmy w stanie robić naprawdę różne rzeczy, czyli np.
background ustawić na czerwony, albo żeby
nasza strona była domyślnie czerwona czy biała.
I w momencie gdy zmienia się tło naszego
page'a to możemy zmienić background powiedzmy na czarne.
Czy ja będzie się tak wyrażać?
Jestem bardzo ciekawy jak to będzie
wyglądało i w związku z tym zobaczmy co to się stanie.
Login Register. Na razie nic.
Musimy ustawić jawnie ten przekręt.
Na jakiś kolor.
Więc tutaj możemy ustawić sobie po prostu na klasie content.
Domyślnie znajdźmy naszą klasę content.
Ona jest chyba w layout kropka content.
Tak więc zostawmy tutaj ekran na białe.
I ponownie zobaczmy, co się wydarzy.
Przygotowało się.
I dalej nie zadziałało.
Czy na pewno zaktualizowana transpozycja?
Transition od transition do czarnego.
Powinno być ok.
Ale spróbuj jeszcze ustawić na nie tylko MID.
Pomijając fakt, że.
Ta animacja nie byłaby animacją, którą chciałbym widzieć.
To powinno zadziałać.
W związku z czym jestem troszkę
zaskoczony, bo także Live act i Page Interactive powinny tutaj funkcjonować.
Hall i z powrotem na Transform skala 0 to chyba ona się aplikuje.
Tak ona się aplikuje definitywnie.
I na wyjściu i na wyjściu.
Dlaczego coś nie aplikuje?
To jest dobre pytanie.
No w każdym razie być może są jakieś reguły, których nie do końca rozumiem, jak
działają wewnątrz deklaracje tychże tranzycji.
W każdym razie to co możemy zrobić, to przy pomocy tych selektorów.
Tworzyć różnego rodzaju animacje.
Ja tutaj to zostaje po prostu na oba sety.
I zmienię to z powrotem na Obsidian.
0.
I tutaj troszkę krótsza animacja, żeby to tak nie męczyło oczu.
I w tym momencie to na pewno będzie nam działało w jedną stronę, co nie wchodzi.
Zastanawiam się czy to jest kwestia tego,
że to jest error page i on jako error może mieć inne.
Inne style. Jeżeli wchodzimy
ze strony głównej na login to tutaj wygląda ta animacja ładnie.
I wracając na stronę główną.
Tutaj swoją drogą widzimy taki loading.
To też wygląda dobrze, w związku z czym prawdopodobnie strony 404 mają tutaj
inne zasady, które być może powinniśmy tutaj zaadaptować.
W każdym razie warto o tym wiedzieć.
Tyle, że te klasy zadziałają tylko i wyłącznie na linkach tekstowych.
Musimy używać plików tekstowych, aby to poprawnie zadziałało.
Wtedy page nam się ładnie oznaczają, który
jest aktywny, który jest nieaktywny i mamy taki efekt animacji dostępny w tekście.
Jest to dosyć błahe w kontekście tego, co może cały
tekst, w związku z czym nie skupiał bym na tym zbyt dużej uwagi.
Ale jeżeli mamy taką potrzebę, no to
jesteśmy w stanie tworzyć takie przejścia pomiędzy podstronami.
Zmiany wprowadzone w lekcji · 7 min
diff --git a/22/minipedia/assets/global.css b/22/minipedia/assets/global.css
new file mode 100644
index 0000000..34a01d9
--- /dev/null
+++ b/22/minipedia/assets/global.css
@@ -0,0 +1,7 @@
+.page-enter-active, .page-leave-active {
+ transition: opacity .3s ease-in-out;
+}
+
+.page-enter, .page-leave-active {
+ opacity: 0;
+}
\ No newline at end of file
diff --git a/22/minipedia/layouts/default.vue b/22/minipedia/layouts/default.vue
index 8f39f82..3ec702a 100644
--- a/22/minipedia/layouts/default.vue
+++ b/22/minipedia/layouts/default.vue
@@ -211,6 +211,7 @@
background: white;
padding: 1rem;
border: 0.1rem solid var(--light-blue);
+ background: white;
}
a {
diff --git a/22/minipedia/nuxt.config.js b/22/minipedia/nuxt.config.js
index 40c2638..f948490 100644
--- a/22/minipedia/nuxt.config.js
+++ b/22/minipedia/nuxt.config.js
@@ -27,7 +27,7 @@ export default {
// Global CSS: https://go.nuxtjs.dev/config-css
css: [
-
+ '~/assets/global.css'
],
// Plugins to run before rendering page: https://go.nuxtjs.dev/config-plugins