Sapper jest ramami zbudowanymi na szczycie Svelte. Koncentruje się na przyspieszeniu z pudełka z renderowaniem serwera, link wstępnie ładowaniem i możliwością tworzenia pracowników serwisowych. W połączeniu z svelte, wynik końcowy jest wysoce konfigurowalny, błyskawiczny fast witryny z małym śladem.
W tym samouczku będziemy korzystać z Sapper, aby zbudować lekką witrynę blogowania za pomocą komponentów Svelte (patrz nasz
Jak uruchomić blog
post na mniejsze wskazówki techniczne na blogowaniu). Svelte to ramy z różnicą. Analizuje kod w czasie kompilacji i tworzy zestaw modułów w Vanilla JavaScript, który pozwala uniknąć potrzeby wykonawczego. Jeśli potrzebujesz dalszej pomocy w układach, sprawdź nasze post, jak uzyskać idealny
Układ strony internetowej.
. Lub na inne opcje, zobacz te najlepsze
Budowniczowie stron internetowych.
i pamiętaj, że będziesz musiał uzyskać twój
hosting
Serwis na punkcie.
Pobierz pliki samouczka na plikach
Po pierwsze, musimy pobrać i zainstalować zależności. Opiera się na Svelte, aby pracować i wymaga kolejnych ram do budowania serwera, ale reszta zależy od zbudowanego wniosku. W takim przypadku potrzebujemy kilku pakietów, aby pomóc wyodrębnić pliki Markdown później.
Pobierz pliki samouczka (powyżej), znajdź je w wierszu poleceń i zainstaluj zależności.
> npm install
Sapper jest zbudowany w dwóch częściach - ramie po stronie klienta i renderowania po stronie serwera tego struktury. Pomaga to uzyskać dodatkowe zwiększenie prędkości dla osób wolniejszych sieci. Jest zbudowany przy użyciu węzła, który umożliwia oprogramowanie pośrednie sapper, aby zrobić całą ciężką podnoszenie dla nas.
Otwórz serwer.js i utwórz serwer z Express. Korzystając z ich zaleceń, uwzględniamy kompresja Aby zmniejszyć pliki wysyłane i sirv. służyć plikom statyczne.
Express ()
.posługiwać się(
kompresja ({próg: 0}),
SIRV ("statyczny", {dev}),
sapper.middleweware ()
)
.listen (port);
Po stronie klienta musimy powiedzieć sapper, gdzie zamontować aplikację. Jest podobny do reagowania Domu renderowanie lub Vue's. $ Mount. metody. Wewnątrz klienta.js, rozpocznij sapper i zamontuj go do korzenia & lt; div & gt; element. Ten element jest zawarty w pliku szablonu, który przyjdziemy później.
Importuj * jako saper z "@ sapper / app";
sapper.start ({
Cel: Document.getElementByid (
"korzeń")
});
Z konfiguracją podstawowego serwera i plików klienta możemy uruchomić serwer rozwoju. Wyprowadza się z kompilacji plików serwera, klienta i serwisu, a domyślnie uruchomi się na porcie 3000. Za każdym razem, gdy zmienia się plik, odbuduje część zmienionej aplikacji.
Uruchom serwer w wierszu poleceń. Trzymaj to okno otwarte podczas opracowywania witryny.
& GT; NPM RUNV
Wszystko w katalogu "Trasy" zmieni się w trasę do aplikacji. Pliki z
.js.
Rozszerzenie stanie się nazywane trasami serwera. Trasy te nie mają ui, ale zamiast tego są wymagane przez aplikację do pobrania danych. W naszym przypadku użyjemy ich do załadowania postów blogowych.
The. Trasy / blog / index.json.js Plik utworzy /blog.json. punkt końcowy na naszym serwerze. Zaimportuj posty na blogu i utwórz od nich JSON.
Posty importowe z "./_posts.js";
Const Spis treści = JSON.Stringify (
posts.map (post = & gt; ({
Autor: Post.author,
Obraz: post.image,
Tytuł: post.title,
Slug: Post.slug.
})))
);
Funkcje eksportu tras serwerów, które odpowiadają metodom HTTP. Na przykład, aby odpowiedzieć na żądanie, wyeksportujemy funkcję otrzymać z pliku trasy serwera. Stwórz otrzymać Funkcja, która odpowiada dane, które zebraliśmy w poprzednim kroku w formacie JSON. otwarty http: // localhost: 3000 / blog.son W przeglądarce i sprawdź, czy słupki przechodzą.
Funkcja Eksportuj Get (REQ, RES) {
res.writehead (200, {
"Typ treści": "Aplikacja / JSON"
});
res.end (zawartość);
}
Strony w Sapper są regularne komponenty Svelte. Każdy komponent jest jednym plikiem z a .smukły rozszerzenie i zawierają całą logikę i stylizacji do zarządzania. Każdy JavaScript ten składnik musi uruchomić, będzie żył wewnątrz & lt; script & gt; Tag - tak jak każda strona HTML.
Wewnątrz
Trasy / index.svelte.
, zaimportuj kilka innych komponentów Svelte, których możemy użyć do zbudowania tej strony. Eksportuj A.
Posty.
Zmienna, którą wypełnimy później.
Skrypt i GT;
Importuj pojemnik z
"../Components/container.svelte";
Import Postadsummary z
"../Components/postsummary.svelte";
Eksport Pozwól stanowić posty;
& lt; / script & gt;
Z konfigurowaniem strony możemy zacząć wprowadzać w blogu posty (możesz je poprzeć magazyn w chmurze ). Musimy to zrobić, gdy tylko zostanie załadowana strona. Aby serwer był świadomy tego, a następnie zażądać tych danych, gdy sprawia, że strona, musi przejść do osobnego & lt; skrypt Context = "Module" & GT; etykietka.
Na serwerze Sapper będzie szukać
Preload.
Funkcja i poczekaj, aż zakończy się przed wyświetleniem strony. Tutaj wypełniamy
Posty.
zmienna z poprzedniego kroku.
Context Script = "Moduł" & GT;
Eksportuj Async Funkcja Preload () {
Const Res = Czeka
to.fetch ("blog.json");
CINST DATA = ACAIT RES.JSON ();
powrót {posty: dane};
}
& lt; / script & gt;
W Svelte, zmienne są domyślnie reaktywne. Oznacza to, że, gdy aktualizują nasze komponenty również aktualizują również. Jako Posty. Zmienna teraz ma teraz tablicę postów blogowych, możemy je przepętlić i wyświetlać je.
Możemy to zrobić za pomocą #każdy blok. Powtarzają to, co znajduje się w nawiasach dla każdego elementu w tablicy. Na dole komponentu, poza dowolnymi tagami, dodaj HTML, aby wyświetlić posty.
Container & GT;
& lt; Ul & GT;
{#each postów jako post}
& lt; li & gt;
& LT; Postadsummary {... Post} / & GT;
& lt; / li & gt;
{/każdy}
& lt; / ul & gt;
& LT; / Container & GT;
Możemy używać komponentów, aby zawierać wielokrotną logikę i używać ich, gdziekolwiek są potrzebne - wliczone style. The. & lt; kontener & gt; Komponent nie robi niczego, ale możemy go użyć, aby uzyskać maksymalną szerokość zawartości w niej.
Otworzyć Komponenty / kontener.svelt. i dodaj kilka stylów wewnątrz & lt; style & gt; etykietka. Wszelkie style, które stosujemy w środku komponentu, są łączone do tego składnika, co oznacza, że możemy użyć selektora ogólnego.
Styl & GT;
div {
Margines: 0 Auto;
Wyściółka: 0 1Rem;
Max-szerokość: 50Rem;
}
& LT; / Style & GT;
Jeśli komponent jest zaprojektowany tak, aby był rodzicem do innych elementów, potrzebujemy sposobu, aby przejść te składniki. The. & LT; Slot & GT; Element robi to po prostu i może być umieszczony wszędzie, który ma sens wewnątrz znacznika komponentu.
Z & lt; kontener & gt; , owijamy zawartość w stylu & lt; div & gt; . Posługiwać się & LT; Slot & GT; w środku & lt; div & gt; przekazać wszystko inne.
Div & GT;
& lt; slot / & gt;
& lt; / div & gt;
Nie każdy komponent będzie pobierać niektórych danych. Ponieważ ładujemy posty z komponentu strony głównej, można go przekazać do elementów, które sprawiają, że za pośrednictwem atrybutów.
otwarty komponenty / postsummary.svelte. i zdefiniuj niektóre atrybuty na górze pliku. Są one wypełnione przez operatora rozprzestrzeniania dodaliśmy w etapie 09.
Skrypt i GT;
Eksport Pozwól autorze;
Eksport Let Image;
Eksport Niech Silug;
Eksport niech tytuł;
& lt; / script & gt;
Gdy atrybuty są zaludnione, są one następnie dostępne, jak każda inna zmienna. Mając oddzielne atrybuty dla każdej części podsumowania poczty, ułatwiamy odczytanie znacznika.
Na dole komponentu dodaj trochę HTML, aby utworzyć podsumowanie. Klasy odnoszą się do wstępnie zdefiniowanych stylów.
& LT; Artykuł & GT;
& lt; div class = "post-image" style = "
Background-Image: URL ({Image}) "/ & GT;
& lt; div class = "ciało" & gt;
& lt; div class = "autor-obraz" & gt;
& lt; img src = {autor.Image}
alt = {author.name} / & gt;
& lt; / div & gt;
& lt; div Class = "O" & GT;
& lt; h1 & gt; {tytuł} & lt; / h1 & gt;
& lt; span class = "byline" & gt; przez
{author.name} & lt; / span & gt;
& lt; / div & gt;
& lt; / div & gt;
& LT; / Article & GT;
W przeciwieństwie do podobnych ram, takich jak Next.js, Sapper współpracuje z regularnymi linkami kotwicowymi. W czasie kompilacji jest w stanie wykryć wewnętrzne linki, a także w celu dokonania własnych optymalizacji.
Zaktualizuj znacznik z poprzedniego kroku, owijając go w linku. Nie ma potrzeby tworzenia łańcuchów szablonów, aby skomponować Usuny URL.
A Rel = "Prefetlet" href = "/ blog / {slug}" & gt;
& lt; artykuł / artykuł / artykuł / artykuł;
& lt; / a & gt;
Sapper jest w stanie tworzyć strony na podstawie parametrów URL. W naszym przypadku odwołujemy się do / blog / ślimak, co oznacza, że czyni komponent w /Routes/blog/[SLUG].svelte. .
Wewnątrz tego komponentu pobieraj dane blogu, takie jak dla strony indeksu. The. params. Obiekt zawiera parametry z adresu URL, które w tym przypadku jest ślimak.
Context Script = "Moduł" & GT;
Eksportuj funkcję Async.
Preload ({params}) {
Const Res = Czeka na to.
`Blog / $ {params.slug} .json`);
CINST DATA = ACAIT RES.JSON ();
}
& lt; / script & gt;
W przeciwieństwie do strony indeksu istnieje szansa, że nie ma miejsca na blogu w adresie URL. W takim przypadku powinniśmy wyświetlić błąd. Wraz z sprowadzać , The.. Preload. Metoda obejmuje również metodę błąd Zamiast tego zmienia odpowiedź na stronę błędu.
Na końcu metody wstępnej, pokaż błąd, jeśli nie ma postu. W przeciwnym razie ustaw Poczta zmienna dla strony.
IF (res.status === 200) {
powrót {post: dane};
} else {
Ten.Error (res.status,
dane.message);
}
Dzięki pobraniu danych możemy teraz pokazać post na stronie. Podobnie jak komponent Postachary, wyświetlamy każdą część zawartości postu wewnątrz wsporników kręconymi. Na dole komponentu dodaj trochę znacznika, aby wyświetlić na stronie.
Artykuł;
& lt; kontener & gt;
& lt; div class = "tytuł" & gt;
& lt; h1 & gt; {post.title} & lt; / h1 & gt;
& lt; div class = "Byline" & gt; przez
{post.author.name} & LT; / Div & GT;
& lt; / div & gt;
& lt; img class = "post-Image" src = {post.Image} alt = "" / & gt;
{post.html}
& LT; / Container & GT;
& LT; / Article & GT;
Patrząc na stronę teraz, wszystko jest poprawnie opróżnione z rzeczywistej zawartości pocztowej. Konwersja Markdown generuje HTML, ale widzimy, że drukowane jako tekst na samym postie. Sapper ma wbudowany parser HTML w tym przypadku. Umieszczać @html. Przed nim będzie używać tego parsera.
{{@ html post.html}
Nasze blog działa poprawnie, ale konieczne jest kilka zmian. Jednym z nich jest zaktualizowanie & lt; title & gt; Na stronie, aby relabel zakładka jest wyświetlana.
Svelate obsługuje A. & lt; svelte: Head & GT; element, który wstrzykuje wszystko w nim do & lt; Head & GT; na stronie. Użyj tego, aby ustawić tytuł poczty jako & lt; title & gt; .
Svelte: Head & GT;
& lt; tytuł i gt; {post.title} |
Sapper Blog & LT; / Title & GT;
& lt; / svelte: Head & GT;
Każda strona przechodzi przez szablon, aby stemplować HTML na resztę strony. W tym miejscu zostanie wprowadzona jakakolwiek konfiguracja, jak import czcionek i metad. Otwórz szablon.html i dodaj haka do zawartości & lt; svelte: Head & GT; element z poprzedniego kroku. Dodaj to tuż przed zamknięciem & LT; / Head & GT; etykietka.
Head & GT;
[...]% sapper.head%
& LT; / Head & GT; ostatnia rzecz musimy dodać, jest układ na blogu. Zamiast owijać każdą stronę w komponencie, Sapper będzie szukał pliku "_layout.svelte", aby wykonać tę pracę dla nas.
Wewnątrz _LAYOUT.SVELTE, importuj header & gt; komponent i pokaż, że na górze każdej strony. Zapewnia wygodne link do strony głównej.
Ostatnią rzeczą, jaką musimy dodać, jest układ na blogu. Zamiast owijać każdą stronę w komponencie, Sapper będzie szukać _layout.svelt. Plik, aby wykonać tę pracę dla nas. Wewnątrz _layout.svelt. , importuj nagłówek i GT; komponent i pokaż, że na górze każdej strony. Zapewnia wygodne link do strony głównej.
Skrypt i GT;
Nagłówek importowy z
"../Components/header.svelte";
& lt; / script & gt;
& lt; main & gt;
& LT; Header / & GT;
& lt; slot / & gt;
& lt; / main & gt;
Ta treść pierwotnie pojawiła się w projektancie internetowym.
(Kredyt obrazu: Phil Galloway) W tym samouczku Adobe Fresco będę tworzący tętniący życiem i emocjonalny portret..
(Kredyt obrazu: przyszłość) Grava jest systemem zarządzania treścią (CMS) z różnicą. Systemy zarządzania tr..
W tym samouczku będę cię prowadzić przez mój proces stworzenia urzekającego fantazji portret Elven Maiden. Jej historia jes..
Podczas koncepcji stworzeń w Zbrush, prezentując swój pomysł jako szarości, nieznany kawałek 3d art. może u..
Istnieje wiele ciekawych efektów, które można dodać do strony, aby zwiększyć zaangażowanie, ale ważne jest, aby wybrać e..
W połowie 2000 r. Wirtualni agenci i obsługa klienta Chatbots otrzymali dużo wspólnego, mimo że nie były bardzo konwersacyj..
Twoja treść przechodzi nigdzie, chyba że ludzie mogą go wyszukać i znaleźć, więc treści należy napisać ze zrozumieniem..
Jakie jest narzędzie mostowe? Jeśli jesteś nowy w CGI, istnieje zbyt wiele narzędzi do wyboru w zawrotnej tabli..