{"id":11577,"date":"2022-10-28T14:50:48","date_gmt":"2022-10-28T12:50:48","guid":{"rendered":"https:\/\/vived.io\/?p=11577"},"modified":"2022-10-28T14:50:51","modified_gmt":"2022-10-28T12:50:51","slug":"przyszlosc-jest-dzisiaj-czyli-next-js-13-frontend-weekly-vol-110","status":"publish","type":"post","link":"https:\/\/vived.io\/pl\/przyszlosc-jest-dzisiaj-czyli-next-js-13-frontend-weekly-vol-110\/","title":{"rendered":"Przysz\u0142o\u015b\u0107 jest dzisiaj, czyli Next.js 13 | Frontend Weekly vol. 110"},"content":{"rendered":"\n<h2 id=\"1-next-js-conf\" data-num=1>1. Next.js Conf \ud83d\ude80<\/h2>\n\n\n\n<p>Vercel to jedna z najlepiej dofinansowanych firm zbudowanych wok\u00f3\u0142 otwarto\u017ar\u00f3d\u0142owej technologii. Na przestrzeni ostatnich lat (i 4 rund finansowania), <a href=\"https:\/\/www.crunchbase.com\/organization\/vercel\/company_financials\">firma zgromadzi\u0142a na swoim koncie ponad 300 milion\u00f3w dolar\u00f3w<\/a>. Nale\u017cy przyzna\u0107, \u017ce pieni\u0105dze te zosta\u0142y dobrze zainwestowane. Next.js sta\u0142 si\u0119 w\u0142a\u015bciwie domy\u015blnym rozwi\u0105zaniem je\u015bli chodzi o renderowania Reacta po stronie serwera, a chmura oferowana przez firm\u0119 z roku na rok zyskuje coraz wi\u0119cej sympatyk\u00f3w.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"577\" height=\"433\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/download-37.jpeg\" alt=\"\" class=\"wp-image-11578\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/download-37.jpeg 577w, https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/download-37-300x225.jpeg 300w\" sizes=\"auto, (max-width: 577px) 100vw, 577px\" \/><\/figure><\/div>\n\n\n<p>Sukces Next.js przyci\u0105gn\u0105\u0142 te\u017c na\u015bladowc\u00f3w. W\u015br\u00f3d najwi\u0119kszych rywali wymieni\u0107 nale\u017cy Hydrogen (framework do SSR rozwijany przez Shopify, dedykowany budowaniu sklep\u00f3w przy u\u017cyciu ich platformy) oraz Remix (framework do SSR rozwijany przez tw\u00f3rc\u00f3w react-router). Ten drugi pod wzgl\u0119dem modelu biznesowego mocno przypomina Next.js. R\u00f3wnie\u017c jest on rozwijany budowany wok\u00f3\u0142 otwarto\u017ar\u00f3d\u0142owych technologii (rect-router, Remix) i podobnie jak sw\u00f3j konkurent znalaz\u0142 <a href=\"https:\/\/www.crunchbase.com\/organization\/remix\">inwestor\u00f3w wierz\u0105cych w jego sukces<\/a>. Patrz\u0105c realistycznie na sytuacj\u0119 nale\u017cy jednak zauwa\u017cy\u0107, \u017ce zar\u00f3wno pod wzgl\u0119dem adopcji jak i funduszy, Next.js od konkurencji dzieli przepa\u015b\u0107.<\/p>\n\n\n\n<p>Bior\u0105c pod uwag\u0119 popularno\u015b\u0107 i bud\u017cety Next.js, nie dziwi\u0105 oczekiwania jakie naros\u0142y wok\u00f3\u0142 Next.js Conf. Jak si\u0119 okaza\u0142o, nadzieje pok\u0142adane w konferencji zosta\u0142y spe\u0142nione z nawi\u0105zk\u0105. Opr\u00f3cz Next.js 13 i zupe\u0142nie nowego systemu routingu,&nbsp; zaprezentowana zosta\u0142a alternatywa dla Webpack w postaci Turbopack i sporo wi\u0119cej.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/6ymj5i.gif\" alt=\"\" class=\"wp-image-11580\" width=\"415\" height=\"332\"\/><\/figure><\/div>\n\n\n<h3 class=\"wp-block-heading\">1.1 Nowy routing w Next.js<\/h3>\n\n\n\n<p><a href=\"https:\/\/nextjs.org\/blog\/layouts-rfc\">O RFC dotycz\u0105cym nowego routingu w Next.j<\/a>s informowali\u015bmy Was kilka miesi\u0119cy temu w <a href=\"https:\/\/vived.io\/pl\/frontend-thursday-vol-89-koniec-monopolu-webkit-na-ios-lerna-wraca-do-zywych-typescript-4-7\/\">Frontend Weekly vol. 89<\/a> (niestety tylko w j\u0119zyku polskim). Od tego czasu min\u0119\u0142o ju\u017c sporo czasu, do RFC trafi\u0142o kilka zmian, a pierwsza wersja nowego routera jest ju\u017c dost\u0119pna w Next.js 13. Z tego powodu, dzisiaj ponownie przyjrzymy si\u0119 temu tematowi.<\/p>\n\n\n\n<p>Do tej pory komponent Next.js dopasowywa\u0142 \u015bcie\u017ck\u0119 w pasku przegl\u0105darki do odpowiedniego katalogu, a nast\u0119pnie wy\u015bwietla\u0142 komponent zdefiniowany w pliku index.js. Nowy router zamiast pliku index.js szuka\u0142 b\u0119dzie pliku page.js. Najwi\u0119ksz\u0105 nowo\u015bci\u0105 jest jest fakt, \u017ce Next.js znajdzie r\u00f3wnie\u017c wszystkie pliku layout.js znajduj\u0105ce si\u0119 w \u015bcie\u017cce katalog\u00f3w i wy\u015bwietli je jako \u201copakowanie\u201d naszej strony. Co wa\u017cne, dane zar\u00f3wno dla strony jak i wszystkich layout \u0142adowane b\u0119d\u0105 r\u00f3wnolegle.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"483\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/nested-layouts-1024x483.jpg\" alt=\"\" class=\"wp-image-11582\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/nested-layouts-1024x483.jpg 1024w, https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/nested-layouts-300x141.jpg 300w, https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/nested-layouts-768x362.jpg 768w, https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/nested-layouts-1536x724.jpg 1536w, https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/nested-layouts-2048x966.jpg 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"475\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/nested-layouts-example-1024x475.jpg\" alt=\"\" class=\"wp-image-11584\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/nested-layouts-example-1024x475.jpg 1024w, https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/nested-layouts-example-300x139.jpg 300w, https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/nested-layouts-example-768x356.jpg 768w, https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/nested-layouts-example-1536x712.jpg 1536w, https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/nested-layouts-example-2048x950.jpg 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Kolejn\u0105 nowo\u015bci\u0105 jest r\u00f3wnie\u017c pojawienie si\u0119 plik\u00f3w error.js i loading.js. Te pierwsze wykorzystywane b\u0119d\u0105, kiedy podczas pobierania danych lub renderowania wyst\u0105pi\u0142 nieoczekiwany b\u0142\u0105d. Te drugie wy\u015bwietlane b\u0119d\u0105 zanim wszystkie komponenty w poddrzewie zostan\u0105 wyrenderowane (pod spodem Next.js wykorzystuje usprawniony w React 18 Suspense).<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"526\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/download-2-1024x526.png\" alt=\"\" class=\"wp-image-11604\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/download-2-1024x526.png 1024w, https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/download-2-300x154.png 300w, https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/download-2-768x395.png 768w, https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/download-2.png 1495w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Fundamentaln\u0105 zmian\u0105 w nowym routingu jest r\u00f3wnie\u017c uczynienie React Server Components domy\u015blnym typem komponent\u00f3w. Oznacza, \u017ce tworz\u0105c komponenty uwa\u017ca\u0107 musimy na ograniczenia jakie React narzuca przy korzystaniu React Server Components (ze szczeg\u00f3lnym uwzgl\u0119dnieniem ogranicze\u0144 w mieszaniu ich z Client Components). Oznacza to te\u017c, \u017ce dop\u00f3ki nie zaczniemy definiowa\u0107 Client Components, ca\u0142o\u015b\u0107 naszej aplikacji renderowana b\u0119dzie po stronie serwera. Zachowanie to powinno sprawi\u0107, \u017ce paczka kodu JavaScript wysy\u0142ana do klienta b\u0119dzie ekstremalnie ma\u0142a. Niestety pierwsze testy przeprowadzane przez u\u017cytkownik\u00f3w tego nie potwierdzaj\u0105 i aplikacja renderowana w 100% po stronie serwera nadal wa\u017cy ca\u0142kiem sporo. W sieci nie natrafi\u0142em na oficjalne potwierdzenie, ale prawdopodobnie spora paczka spowodowana jest problemami wieku dzieci\u0119cego Next.js 13.<\/p>\n\n\n\n<figure class=\"wp-block-embed aligncenter is-type-rich is-provider-twitter wp-block-embed-twitter\"><div class=\"wp-block-embed__wrapper\">\n<blockquote class=\"twitter-tweet\" data-width=\"500\" data-dnt=\"true\"><p lang=\"en\" dir=\"ltr\">Circling back and re-testing the Hello World experience in the brand new <a href=\"https:\/\/twitter.com\/nextjs?ref_src=twsrc%5Etfw\">@nextjs<\/a> 13. Still seeing a 272 kB baseline of client-side JavaScript \ud83d\ude2c (90 kB compressed).<br><br>The project waterfall starts at 88% JS \ud83d\udc40 <a href=\"https:\/\/t.co\/xpwr0bErUT\">pic.twitter.com\/xpwr0bErUT<\/a><\/p>&mdash; Zach Leatherman (@zachleat) <a href=\"https:\/\/twitter.com\/zachleat\/status\/1584995586918731776?ref_src=twsrc%5Etfw\">October 25, 2022<\/a><\/blockquote><script async src=\"https:\/\/platform.twitter.com\/widgets.js\" charset=\"utf-8\"><\/script>\n<\/div><\/figure>\n\n\n\n<p>To jeszcze nie koniec zmian jakie wprowadza nowy routing. Wchodzimy jednak w obszar skomplikowanych funkcjonalno\u015bci, dlatego wszystkich zainteresowanych szczeg\u00f3\u0142ami odsy\u0142am <a href=\"https:\/\/nextjs.org\/blog\/layouts-rfc\">do oryginalnego RFC<\/a>. Tutaj nadmieni\u0119 tylko, \u017ce znajdziemy w\u015br\u00f3d nich takie pere\u0142ki jak grupowanie \u015bcie\u017cek w domenowe konteksty, strony zawieraj\u0105ce kilka slot\u00f3w , w kt\u00f3re nast\u0119pnie trafiaj\u0105 odpowiednie fragmenty, czy wykorzystanie konwencji znanej z terminala do przechwytywanie zapyta\u0144 z danej strony i na przyk\u0142ad wy\u015bwietlania modala.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"566\" height=\"500\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/6ymg2p.jpeg\" alt=\"\" class=\"wp-image-11588\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/6ymg2p.jpeg 566w, https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/6ymg2p-300x265.jpeg 300w\" sizes=\"auto, (max-width: 566px) 100vw, 566px\" \/><\/figure><\/div>\n\n\n<p>Sekcj\u0119 to chcia\u0142bym zako\u0144czy\u0107 ma\u0142\u0105 krytyk\u0105 w stron\u0119 Next.js z mojej strony. Jako deweloperzy pokochali\u015bmy routing oparty o struktur\u0119 plik\u00f3w ze wzgl\u0119du na jego prostot\u0119. Pojawienie si\u0119 w strukturze plik\u00f3w tak wielu symboli (`[parametr] do przechowywania parametr\u00f3w w \u015bcie\u017cce, `@` do definiowania fragment\u00f3w, `(..)(..)` do przechwytywania zapyta\u0144 i `(nazwa)` do grupowania w domenowe konteksty) sprawia, \u017ce routing staje si\u0119 skomplikowany, a jego zrozumienie wymaga sporo wiedzy domenowej. Zada\u0107 nale\u017cy sobie pytanie, czy routing zdefiniowany w plikach nie jest w tak zaawansowanych przypadkach czytelniejszy? Nie zrozumcie mnie \u017ale, wsparcie dla zagnie\u017cd\u017conych layout\u00f3w, obs\u0142uga b\u0142\u0119d\u00f3w i \u0142adowania oraz wsparcie dla React Server Components to te funkcjonalno\u015bci, kt\u00f3rych Next.js potrzebowa\u0142, ale w mojej g\u0142owie ko\u0142ata pytanie: czy to przypadkiem nie jest ju\u017c jeden krok za daleko?<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1.2 Turbopack, czyli Webpack 6.0<\/h3>\n\n\n\n<p>Wraz ze sporym nap\u0142ywem \u015brodk\u00f3w, Vercel mocno postawi\u0142 na rekrutacj\u0119 znanych osobisto\u015bci ze \u015bwiata JavaScript\u2019u. Do firmy do\u0142\u0105czy\u0142o sporo znanych nazwisk takich jak Tobias Koppers (tw\u00f3rca Webpacka), Jared Palmer (tw\u00f3rca Formika i Turborepo), czy Rich Harris (tw\u00f3rca Svelte). Jak si\u0119 okazuje, ten pierwszy opr\u00f3cz optymalizacj\u0105 Webpacka, zajmowa\u0142 si\u0119 rozwojem zupe\u0142nie nowego narz\u0119dzia do budowania aplikacji &#8211; Turbopack.&nbsp;<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"500\" height=\"500\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/download-35.jpeg\" alt=\"\" class=\"wp-image-11590\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/download-35.jpeg 500w, https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/download-35-300x300.jpeg 300w, https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/download-35-150x150.jpeg 150w\" sizes=\"auto, (max-width: 500px) 100vw, 500px\" \/><\/figure><\/div>\n\n\n<p>Jak zapowiadaj\u0105 tw\u00f3rcy, Turbopack b\u0119dzie nawet 700x szybszy ni\u017c Webpack i nawet 10x szybszy ni\u017c Vite*! Sk\u0105d tak du\u017cy skok wydajno\u015bci? Jak wi\u0119kszo\u015b\u0107 modnych w 2022 roku narz\u0119dzi deweloperskich dla JavaScript, Turbopack napisany jest w Rust. Na razie Turbopack dost\u0119pny jest w wersji alpha, ale ch\u0119tni mog\u0105 przy jego pomocy budowa\u0107 aplikacje w Next.js 13.&nbsp;<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"750\" height=\"500\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/6ymgbi.jpeg\" alt=\"\" class=\"wp-image-11592\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/6ymgbi.jpeg 750w, https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/6ymgbi-300x200.jpeg 300w\" sizes=\"auto, (max-width: 750px) 100vw, 750px\" \/><\/figure><\/div>\n\n\n<p>Ciekawym aspektem narz\u0119dzi napisanych w Rust (w tym i Turbopack) staje si\u0119 pytanie, czy rozwinie si\u0119 wok\u00f3\u0142 nich r\u00f3wnie \u017cywa spo\u0142eczno\u015b\u0107 wtyczek jak wok\u00f3\u0142 ich JavaScriptowych odpowiednik\u00f3w. Za wtyczkami do webpacka czy babela zazwyczaj stoj\u0105 deweloperzy, kt\u00f3rzy stan\u0119li przed pewnym problemem i postanowili go samodzielnie rozwi\u0105za\u0107. Kiedy wtyczki pisane s\u0105 w j\u0119zyku, w kt\u00f3rym programista pracuje na co dzie\u0144, sytuacja jest stosunkowo prosta. Kiedy rozwi\u0105zanie problemu wymaga\u0107 b\u0119dzie nauki nowego j\u0119zyka (i to takiego du\u017co bardziej niskopoziomowego ni\u017c JavaScript), to mo\u017ce okaza\u0107 si\u0119 to problemem nie do przeskoczenia.&nbsp;<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"717\" height=\"500\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/6ymgmq.jpeg\" alt=\"\" class=\"wp-image-11594\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/6ymgmq.jpeg 717w, https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/6ymgmq-300x209.jpeg 300w\" sizes=\"auto, (max-width: 717px) 100vw, 717px\" \/><\/figure><\/div>\n\n\n<p>* Jak wspomnia\u0142 na swoim twitterze sam Evan You, r\u00f3\u017cnica wydajno\u015bci mi\u0119dzy Turbopack i Vite, wynika przede wszystkim z r\u00f3\u017cnic wydajno\u015bci mi\u0119dzy babelem (stosowanym przez Vite), a SWC (stosowanym przez Turbopack). Ten pierwszy jest znacznie wolniejszy, ale posiada bogat\u0105 bibliotek\u0119 wtyczek, natomiast ten drugi jest znacznie szybszy, ale nie oferuje tylu opcji konfiguracji. Co ciekawe, Evan You podkre\u015bla, \u017ce nic nie stoi na przeszkodzie, aby Vite w przysz\u0142o\u015bci r\u00f3wnie\u017c m\u00f3g\u0142 korzysta\u0107 z SWC.&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-embed aligncenter is-type-rich is-provider-twitter wp-block-embed-twitter\"><div class=\"wp-block-embed__wrapper\">\n<blockquote class=\"twitter-tweet\" data-width=\"500\" data-dnt=\"true\"><p lang=\"en\" dir=\"ltr\">I\u2019m excited about turbopack (vercel\u2019s Rust-based successor to webpack). A few thoughts:<\/p>&mdash; Evan You (@youyuxi) <a href=\"https:\/\/twitter.com\/youyuxi\/status\/1585040261922820096?ref_src=twsrc%5Etfw\">October 25, 2022<\/a><\/blockquote><script async src=\"https:\/\/platform.twitter.com\/widgets.js\" charset=\"utf-8\"><\/script>\n<\/div><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">1.3 `next\/image`<\/h3>\n\n\n\n<p>Tw\u00f3rcy Next.js od d\u0142u\u017cszego czasu w ramach projektu Aurora wsp\u00f3\u0142pracuj\u0105 z zespo\u0142em rozwijaj\u0105cym Chrome nad popraw\u0105 wydajno\u015bci og\u00f3lnopoj\u0119tego internetu. Pierwszym efektem tej wsp\u00f3\u0142pracy jest dedykowany komponent `Image`, kt\u00f3ry opracowany zosta\u0142 w taki spos\u00f3b, aby optymalizowa\u0107 metryki Core Web Vitals. W\u015br\u00f3d jego funkcjonalno\u015bci znajdziemy mi\u0119dzy innymi:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>automatycznie pobiera obrazu w rozdzielczo\u015bci odpowiedniej dla danego urz\u0105dzenia<\/li><li>Op\u00f3\u017anianie pobrania obrazu do momentu, kiedy pojawi si\u0119 on w viewport<\/li><li>Rezerwowanie odpowiedniej ilo\u015bci miejsca na stronie, tak aby unikn\u0105\u0107 layout-shift<\/li><\/ul>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"697\" height=\"500\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/6ymgtb.jpeg\" alt=\"\" class=\"wp-image-11596\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/6ymgtb.jpeg 697w, https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/6ymgtb-300x215.jpeg 300w\" sizes=\"auto, (max-width: 697px) 100vw, 697px\" \/><\/figure><\/div>\n\n\n<h3 class=\"wp-block-heading\">1.4 `next\/font`<\/h3>\n\n\n\n<p>Kolejnym efektem wsp\u00f3\u0142pracy w ramach projektu Aurora&nbsp; jest powstanie zupe\u0142nie nowego systemu obs\u0142ugi czcionek. Od wersji 13, Next.js b\u0119dzie pakowa\u0142 czcionki razem z aplikacj\u0105 i serwowa\u0142 je prosto z serwera. To oznacza, \u017ce pobieranie czcionek nie b\u0119dzie ju\u017c wymaga\u0142o wysy\u0142ania zapyta\u0144 do zewn\u0119trznych serwer\u00f3w!Ponadto Next.js automatycznie dodaje do naszych styli `size-adjust`, co pozwala unikn\u0105\u0107 layout-shift<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"501\" height=\"498\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/6ymgyr.jpeg\" alt=\"\" class=\"wp-image-11598\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/6ymgyr.jpeg 501w, https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/6ymgyr-300x298.jpeg 300w, https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/6ymgyr-150x150.jpeg 150w\" sizes=\"auto, (max-width: 501px) 100vw, 501px\" \/><\/figure><\/div>\n\n\n<h3 class=\"wp-block-heading\">1.5 Prezentacje na d\u0142ugie jesienne wieczory<\/h3>\n\n\n\n<p>Macie tak czasem, \u017ce szukacie fajnych prezentacji z konferencji czy meetup\u00f3w i nie mo\u017cecie znale\u017a\u0107 nic ciekawego? Je\u015bli tak, to mam dla Was dobr\u0105 wiadomo\u015b\u0107! Do sieci trafi\u0142y ju\u017c zapisy nagra\u0144 z Next.js Conf i jest ich naprawd\u0119 sporo. Stawiam dolary przeciwko orzechom, \u017ce znajdziecie tam dla siebie co\u015b ciekawego.<\/p>\n\n\n\n<p class=\"has-text-align-center\"><a href=\"https:\/\/nextjs.org\/conf\">Next.js Keynote<\/a><\/p>\n\n\n\n<p class=\"has-text-align-center\"><a href=\"https:\/\/nextjs.org\/conf\/stage\/s\">Next.js Conf Stage S<\/a><\/p>\n\n\n\n<p class=\"has-text-align-center\"><a href=\"https:\/\/nextjs.org\/conf\/stage\/j\">Next.js Conf Stage J<\/a><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u0179r\u00f3d\u0142a:<\/h3>\n\n\n\n<p><a href=\"https:\/\/nextjs.org\/blog\/next-13\">https:\/\/nextjs.org\/blog\/next-13<\/a><br><a href=\"https:\/\/nextjs.org\/blog\/layouts-rfc#route-groups\">https:\/\/nextjs.org\/blog\/layouts-rfc<\/a><br><a href=\"https:\/\/www.youtube.com\/watch?v=_w0Ikk4JY7U\">https:\/\/www.youtube.com\/watch?v=_w0Ikk4JY7U<\/a><br><a href=\"https:\/\/twitter.com\/dan_abramov\/status\/1585076899126345728\">https:\/\/twitter.com\/dan_abramov\/status\/1585076899126345728<\/a><\/p>\n\n\n\n<h2 id=\"2-angular-14-2\" data-num=2>2. Angular 14.2<\/h2>\n\n\n\n<p>Ostatnio nasze przegl\u0105dy zdecydowanie zdominowane zosta\u0142y przez Reacta. Dzisiaj mamy jednak kr\u00f3tk\u0105 wstawk\u0119 dla wszystkich fan\u00f3w Angulara. Wersja 15 jest ju\u017c tu\u017c za rogiem, bo jej premiera nast\u0105pi w okolicach po\u0142owy listopada. W mi\u0119dzyczasie zesp\u00f3\u0142 Google uraczy\u0142 nas ca\u0142kiem ciekawie wygl\u0105daj\u0105ca wersj\u0105 minor 14.2.<\/p>\n\n\n\n<p>.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"500\" height=\"650\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/6ymh7u.jpeg\" alt=\"\" class=\"wp-image-11600\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/6ymh7u.jpeg 500w, https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/6ymh7u-231x300.jpeg 231w\" sizes=\"auto, (max-width: 500px) 100vw, 500px\" \/><\/figure><\/div>\n\n\n<p>Do Angulara 14.2 trafi\u0142o API, kt\u00f3re pozwala na konfiguracj\u0119 routera poprzez kompozycj\u0119 odpowiednich funkcji. Taka architektura pozwala na zastosowanie tree-shaking wobec kodu dotycz\u0105cego routingu. Jak podaj\u0105 tw\u00f3rcy, usprawnienie to odchudza kod routingu \u015brednio o ponad 10%!<\/p>\n\n\n\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-typescript\">\/\/ Before Angular 14.2\nconst appRoutes: Routes = [\u2026];\nbootstrapApplication(AppComponent, {\n  providers: [\n    importProvidersFrom(RouterModule.forRoot(appRoutes), {\n      preloadingStrategy: PreloadAllModules\n    }),\n  ]\n});\n\n\/\/ Angular 14.2\nconst appRoutes: Routes = [];\nbootstrapApplication(AppComponent, {\n  providers: [\n    provideRouter(appRoutes, withPreloading(PreloadAllModules))\n  ]\n});<\/code><\/pre>\n\n\n\n<p>Kolejna nowo\u015b\u0107 w Angularze 14.2, to mo\u017cliwo\u015b\u0107 definiowania functional guard. W po\u0142\u0105czeniu z dodan\u0105 w Angularze 14 funkcj\u0105 <code>inject()<\/code> mo\u017cliwe jest wi\u0119c zast\u0105pienie w\u0142a\u015bciwie wszystkich guard\u00f3w prost\u0105 funkcj\u0105.<\/p>\n\n\n\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-typescript\">const route = {\n  path: \u2018edit\u2019,\n  component: EditCmp,\n  canDeactivate: [\n    (component: EditCmp) =&gt; !component.hasUnsavedChanges\n  ]\n};<\/code><\/pre>\n\n\n\n<p>Niew\u0105tpliw\u0105 zalet\u0105 takiej architektury jest r\u00f3wnie\u017c prostota parametryzacji guard\u00f3w: zamiast przekazywa\u0107 i czyta\u0107 dane z ActivatedRouteSnapshot, mo\u017cemy po prostu przekaza\u0107 je jako argumenty funkcji.<\/p>\n\n\n\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-typescript\">const route = {\n  path: \u2018edit\u2019,\n  component: EditCmp,\n  canActivate: [allowedUserTypes([\u2018ADMIN\u2019, \u2018SUPER_ADMIN\u2019])]\n};<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\u0179r\u00f3d\u0142a:<\/h3>\n\n\n\n<p><a href=\"https:\/\/blog.angular.io\/advancements-in-the-angular-router-5d69ec4c032\">https:\/\/blog.angular.io\/advancements-in-the-angular-router-5d69ec4c032<\/a><br><a href=\"https:\/\/netbasal.com\/using-the-angular-http-client-in-angular-v15-f4bec3c11926\">https:\/\/netbasal.com\/using-the-angular-http-client-in-angular-v15-f4bec3c11926<\/a><\/p>\n\n\n\n<h2 id=\"3-vite-conf\" data-num=3>3. Vite Conf<\/h2>\n\n\n\n<p>Konferencja Vite nie by\u0142a tak obfita w nowo\u015bci jak Next.js Conf. Nie oznacza to, \u017ce nie przemkn\u0119\u0142o si\u0119 na niej kilka mniejszych i wi\u0119kszych nowo\u015bci. Najciekawsz\u0105 z nich jest <a href=\"https:\/\/stackblitz.com\/codeflow\">StackBlitz Codeflow<\/a>, kt\u00f3ry umo\u017cliwia szybkie sklonowanie projektu w przegl\u0105darce i natychmiastowe uruchomienie aplikacji (dzi\u0119ki <a href=\"https:\/\/blog.stackblitz.com\/posts\/introducing-webcontainers\/\">WebContainers<\/a> mo\u017cliwe jest r\u00f3wnie\u017c uruchomienie serwerowych aplikacji). Ca\u0142o\u015b\u0107 sprawdza si\u0119 idealnie zw\u0142aszcza przy Code Review, kiedy to szybko mo\u017cemy zobaczy\u0107 efekty wprowadzonych zmian i r\u00f3wnocze\u015bnie nie musimy zaci\u0105ga\u0107 ich na nasz komputer.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p>Je\u015bli po przebrni\u0119ciu przez nagrania z Next.js Conf nadal nie macie dosy\u0107, to mi\u0142o mi poinformowa\u0107, \u017ce na YouTube trafi\u0142 r\u00f3wnie\u017c<a href=\"https:\/\/viteconf.org\/2022\/replay\"> zapis z ponad 40 prezentacji z Vite Conf<\/a>. I nie dajcie si\u0119 zmyli\u0107 nazwie &#8211; w\u015br\u00f3d temat\u00f3w znajdziecie r\u00f3wnie\u017c&nbsp; Storybooka, Ladle (alternatywa dla Storybook od Ubera), Angulara, Astro czy Solid.js. Nie wiem jak Wy, ale ja mam co ogl\u0105da\u0107 do porannej kawy przez co najmniej najbli\u017csze p\u00f3\u0142 roku.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"533\" height=\"500\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/download-36.jpeg\" alt=\"\" class=\"wp-image-11602\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/download-36.jpeg 533w, https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/download-36-300x281.jpeg 300w\" sizes=\"auto, (max-width: 533px) 100vw, 533px\" \/><\/figure><\/div>\n\n\n<h3 class=\"wp-block-heading\">\u0179r\u00f3d\u0142a<\/h3>\n\n\n\n<p><a href=\"https:\/\/viteconf.org\/2022\/replay\">https:\/\/viteconf.org\/2022\/replay<\/a><br><a href=\"https:\/\/stackblitz.com\/codeflow\">https:\/\/stackblitz.com\/codeflow<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>W minionym tygodniu mia\u0142a miejsce konferencja Next.js Conf. Zaprezentowane w jej trakcie nowo\u015bci zdominowa\u0142y wszelkie nag\u0142\u00f3wki i dyskusje. W dzisiejszym przegl\u0105dzie przyjrzymy si\u0119 sk\u0105d to ca\u0142e zamieszanie, co nowego przynosi Next.js 13 i dlaczego Turbopack, to tak naprawd\u0119 Webpack 6.0.<\/p>\n","protected":false},"author":12,"featured_media":11606,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[273],"tags":[479,404,296],"class_list":["post-11577","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-frontend-pl","tag-angular-pl","tag-next-js-pl","tag-vite-pl"],"acf":{"feature_image_visible":false,"weekly_summary":true,"push_notification_image":"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/Frontend-Weekly-1200x628_V2-4.png","feature_image_blog":{"ID":11608,"id":11608,"title":"pexels-pixabay-236277-min","filename":"pexels-pixabay-236277-min-scaled.jpg","filesize":247355,"url":"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/pexels-pixabay-236277-min-scaled.jpg","link":"https:\/\/vived.io\/pl\/przyszlosc-jest-dzisiaj-czyli-next-js-13-frontend-weekly-vol-110\/pexels-pixabay-236277-min\/","alt":"","author":"12","description":"","caption":"","name":"pexels-pixabay-236277-min","status":"inherit","uploaded_to":11577,"date":"2022-10-28 12:47:12","modified":"2022-10-28 12:47:12","menu_order":0,"mime_type":"image\/jpeg","type":"image","subtype":"jpeg","icon":"https:\/\/vived.io\/wp-includes\/images\/media\/default.png","width":2560,"height":1707,"sizes":{"thumbnail":"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/pexels-pixabay-236277-min-150x150.jpg","thumbnail-width":150,"thumbnail-height":150,"medium":"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/pexels-pixabay-236277-min-300x200.jpg","medium-width":300,"medium-height":200,"medium_large":"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/pexels-pixabay-236277-min-768x512.jpg","medium_large-width":768,"medium_large-height":512,"large":"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/pexels-pixabay-236277-min-1024x683.jpg","large-width":1024,"large-height":683,"1536x1536":"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/pexels-pixabay-236277-min-1536x1024.jpg","1536x1536-width":1536,"1536x1536-height":1024,"2048x2048":"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/pexels-pixabay-236277-min-2048x1365.jpg","2048x2048-width":2048,"2048x2048-height":1365,"gform-image-choice-sm":"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/pexels-pixabay-236277-min-scaled.jpg","gform-image-choice-sm-width":300,"gform-image-choice-sm-height":200,"gform-image-choice-md":"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/pexels-pixabay-236277-min-scaled.jpg","gform-image-choice-md-width":400,"gform-image-choice-md-height":267,"gform-image-choice-lg":"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/pexels-pixabay-236277-min-scaled.jpg","gform-image-choice-lg-width":600,"gform-image-choice-lg-height":400}},"estimated_reading_time":"9"},"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.0 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Przysz\u0142o\u015b\u0107 jest dzisiaj, czyli Next.js 13 | Frontend Weekly vol. 110 - Vived<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/vived.io\/pl\/przyszlosc-jest-dzisiaj-czyli-next-js-13-frontend-weekly-vol-110\/\" \/>\n<meta property=\"og:locale\" content=\"pl_PL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Przysz\u0142o\u015b\u0107 jest dzisiaj, czyli Next.js 13 | Frontend Weekly vol. 110 - Vived\" \/>\n<meta property=\"og:description\" content=\"W minionym tygodniu mia\u0142a miejsce konferencja Next.js Conf. Zaprezentowane w jej trakcie nowo\u015bci zdominowa\u0142y wszelkie nag\u0142\u00f3wki i dyskusje. W dzisiejszym przegl\u0105dzie przyjrzymy si\u0119 sk\u0105d to ca\u0142e zamieszanie, co nowego przynosi Next.js 13 i dlaczego Turbopack, to tak naprawd\u0119 Webpack 6.0.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/vived.io\/pl\/przyszlosc-jest-dzisiaj-czyli-next-js-13-frontend-weekly-vol-110\/\" \/>\n<meta property=\"og:site_name\" content=\"Vived\" \/>\n<meta property=\"article:published_time\" content=\"2022-10-28T12:50:48+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-10-28T12:50:51+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/Frontend-Weekly-1200x628_V2-4.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"628\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Tomasz Borowicz\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/vived.io\/pl\/przyszlosc-jest-dzisiaj-czyli-next-js-13-frontend-weekly-vol-110\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/vived.io\/pl\/przyszlosc-jest-dzisiaj-czyli-next-js-13-frontend-weekly-vol-110\/\"},\"author\":{\"name\":\"Tomasz Borowicz\",\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/person\/9d2a72fe7d0dfbb4092675afbab742bb\"},\"headline\":\"Przysz\u0142o\u015b\u0107 jest dzisiaj, czyli Next.js 13 | Frontend Weekly vol. 110\",\"datePublished\":\"2022-10-28T12:50:48+00:00\",\"dateModified\":\"2022-10-28T12:50:51+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/vived.io\/pl\/przyszlosc-jest-dzisiaj-czyli-next-js-13-frontend-weekly-vol-110\/\"},\"wordCount\":1780,\"publisher\":{\"@id\":\"https:\/\/vived.io\/pl\/#organization\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/przyszlosc-jest-dzisiaj-czyli-next-js-13-frontend-weekly-vol-110\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/Frontend-Weekly-1200x628_V2-4.png\",\"keywords\":[\"Angular\",\"Next.js\",\"vite\"],\"articleSection\":[\"Frontend\"],\"inLanguage\":\"pl-PL\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/vived.io\/pl\/przyszlosc-jest-dzisiaj-czyli-next-js-13-frontend-weekly-vol-110\/\",\"url\":\"https:\/\/vived.io\/pl\/przyszlosc-jest-dzisiaj-czyli-next-js-13-frontend-weekly-vol-110\/\",\"name\":\"Przysz\u0142o\u015b\u0107 jest dzisiaj, czyli Next.js 13 | Frontend Weekly vol. 110 - Vived\",\"isPartOf\":{\"@id\":\"https:\/\/vived.io\/pl\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/vived.io\/pl\/przyszlosc-jest-dzisiaj-czyli-next-js-13-frontend-weekly-vol-110\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/przyszlosc-jest-dzisiaj-czyli-next-js-13-frontend-weekly-vol-110\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/Frontend-Weekly-1200x628_V2-4.png\",\"datePublished\":\"2022-10-28T12:50:48+00:00\",\"dateModified\":\"2022-10-28T12:50:51+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/vived.io\/pl\/przyszlosc-jest-dzisiaj-czyli-next-js-13-frontend-weekly-vol-110\/#breadcrumb\"},\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/vived.io\/pl\/przyszlosc-jest-dzisiaj-czyli-next-js-13-frontend-weekly-vol-110\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/vived.io\/pl\/przyszlosc-jest-dzisiaj-czyli-next-js-13-frontend-weekly-vol-110\/#primaryimage\",\"url\":\"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/Frontend-Weekly-1200x628_V2-4.png\",\"contentUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/Frontend-Weekly-1200x628_V2-4.png\",\"width\":1200,\"height\":628},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/vived.io\/pl\/przyszlosc-jest-dzisiaj-czyli-next-js-13-frontend-weekly-vol-110\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Strona g\u0142\u00f3wna\",\"item\":\"https:\/\/vived.io\/pl\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Przysz\u0142o\u015b\u0107 jest dzisiaj, czyli Next.js 13 | Frontend Weekly vol. 110\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/vived.io\/pl\/#website\",\"url\":\"https:\/\/vived.io\/pl\/\",\"name\":\"Vived\",\"description\":\"platform empowering IT people and technology companies to synergic growth\",\"publisher\":{\"@id\":\"https:\/\/vived.io\/pl\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/vived.io\/pl\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pl-PL\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/vived.io\/pl\/#organization\",\"name\":\"Vived\",\"url\":\"https:\/\/vived.io\/pl\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/vived.io\/wp-content\/uploads\/2020\/03\/logo_vived_color.png\",\"contentUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2020\/03\/logo_vived_color.png\",\"width\":136,\"height\":45,\"caption\":\"Vived\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/person\/9d2a72fe7d0dfbb4092675afbab742bb\",\"name\":\"Tomasz Borowicz\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/804536d2672538508d43f60ad2108e5aaea76c192653eaf95d4c3934b7d1dbb6?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/804536d2672538508d43f60ad2108e5aaea76c192653eaf95d4c3934b7d1dbb6?s=96&d=mm&r=g\",\"caption\":\"Tomasz Borowicz\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Przysz\u0142o\u015b\u0107 jest dzisiaj, czyli Next.js 13 | Frontend Weekly vol. 110 - Vived","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/vived.io\/pl\/przyszlosc-jest-dzisiaj-czyli-next-js-13-frontend-weekly-vol-110\/","og_locale":"pl_PL","og_type":"article","og_title":"Przysz\u0142o\u015b\u0107 jest dzisiaj, czyli Next.js 13 | Frontend Weekly vol. 110 - Vived","og_description":"W minionym tygodniu mia\u0142a miejsce konferencja Next.js Conf. Zaprezentowane w jej trakcie nowo\u015bci zdominowa\u0142y wszelkie nag\u0142\u00f3wki i dyskusje. W dzisiejszym przegl\u0105dzie przyjrzymy si\u0119 sk\u0105d to ca\u0142e zamieszanie, co nowego przynosi Next.js 13 i dlaczego Turbopack, to tak naprawd\u0119 Webpack 6.0.","og_url":"https:\/\/vived.io\/pl\/przyszlosc-jest-dzisiaj-czyli-next-js-13-frontend-weekly-vol-110\/","og_site_name":"Vived","article_published_time":"2022-10-28T12:50:48+00:00","article_modified_time":"2022-10-28T12:50:51+00:00","og_image":[{"width":1200,"height":628,"url":"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/Frontend-Weekly-1200x628_V2-4.png","type":"image\/png"}],"author":"Tomasz Borowicz","twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/vived.io\/pl\/przyszlosc-jest-dzisiaj-czyli-next-js-13-frontend-weekly-vol-110\/#article","isPartOf":{"@id":"https:\/\/vived.io\/pl\/przyszlosc-jest-dzisiaj-czyli-next-js-13-frontend-weekly-vol-110\/"},"author":{"name":"Tomasz Borowicz","@id":"https:\/\/vived.io\/pl\/#\/schema\/person\/9d2a72fe7d0dfbb4092675afbab742bb"},"headline":"Przysz\u0142o\u015b\u0107 jest dzisiaj, czyli Next.js 13 | Frontend Weekly vol. 110","datePublished":"2022-10-28T12:50:48+00:00","dateModified":"2022-10-28T12:50:51+00:00","mainEntityOfPage":{"@id":"https:\/\/vived.io\/pl\/przyszlosc-jest-dzisiaj-czyli-next-js-13-frontend-weekly-vol-110\/"},"wordCount":1780,"publisher":{"@id":"https:\/\/vived.io\/pl\/#organization"},"image":{"@id":"https:\/\/vived.io\/pl\/przyszlosc-jest-dzisiaj-czyli-next-js-13-frontend-weekly-vol-110\/#primaryimage"},"thumbnailUrl":"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/Frontend-Weekly-1200x628_V2-4.png","keywords":["Angular","Next.js","vite"],"articleSection":["Frontend"],"inLanguage":"pl-PL"},{"@type":"WebPage","@id":"https:\/\/vived.io\/pl\/przyszlosc-jest-dzisiaj-czyli-next-js-13-frontend-weekly-vol-110\/","url":"https:\/\/vived.io\/pl\/przyszlosc-jest-dzisiaj-czyli-next-js-13-frontend-weekly-vol-110\/","name":"Przysz\u0142o\u015b\u0107 jest dzisiaj, czyli Next.js 13 | Frontend Weekly vol. 110 - Vived","isPartOf":{"@id":"https:\/\/vived.io\/pl\/#website"},"primaryImageOfPage":{"@id":"https:\/\/vived.io\/pl\/przyszlosc-jest-dzisiaj-czyli-next-js-13-frontend-weekly-vol-110\/#primaryimage"},"image":{"@id":"https:\/\/vived.io\/pl\/przyszlosc-jest-dzisiaj-czyli-next-js-13-frontend-weekly-vol-110\/#primaryimage"},"thumbnailUrl":"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/Frontend-Weekly-1200x628_V2-4.png","datePublished":"2022-10-28T12:50:48+00:00","dateModified":"2022-10-28T12:50:51+00:00","breadcrumb":{"@id":"https:\/\/vived.io\/pl\/przyszlosc-jest-dzisiaj-czyli-next-js-13-frontend-weekly-vol-110\/#breadcrumb"},"inLanguage":"pl-PL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/vived.io\/pl\/przyszlosc-jest-dzisiaj-czyli-next-js-13-frontend-weekly-vol-110\/"]}]},{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/vived.io\/pl\/przyszlosc-jest-dzisiaj-czyli-next-js-13-frontend-weekly-vol-110\/#primaryimage","url":"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/Frontend-Weekly-1200x628_V2-4.png","contentUrl":"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/Frontend-Weekly-1200x628_V2-4.png","width":1200,"height":628},{"@type":"BreadcrumbList","@id":"https:\/\/vived.io\/pl\/przyszlosc-jest-dzisiaj-czyli-next-js-13-frontend-weekly-vol-110\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Strona g\u0142\u00f3wna","item":"https:\/\/vived.io\/pl\/"},{"@type":"ListItem","position":2,"name":"Przysz\u0142o\u015b\u0107 jest dzisiaj, czyli Next.js 13 | Frontend Weekly vol. 110"}]},{"@type":"WebSite","@id":"https:\/\/vived.io\/pl\/#website","url":"https:\/\/vived.io\/pl\/","name":"Vived","description":"platform empowering IT people and technology companies to synergic growth","publisher":{"@id":"https:\/\/vived.io\/pl\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/vived.io\/pl\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pl-PL"},{"@type":"Organization","@id":"https:\/\/vived.io\/pl\/#organization","name":"Vived","url":"https:\/\/vived.io\/pl\/","logo":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/vived.io\/pl\/#\/schema\/logo\/image\/","url":"https:\/\/vived.io\/wp-content\/uploads\/2020\/03\/logo_vived_color.png","contentUrl":"https:\/\/vived.io\/wp-content\/uploads\/2020\/03\/logo_vived_color.png","width":136,"height":45,"caption":"Vived"},"image":{"@id":"https:\/\/vived.io\/pl\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/vived.io\/pl\/#\/schema\/person\/9d2a72fe7d0dfbb4092675afbab742bb","name":"Tomasz Borowicz","image":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/vived.io\/pl\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/804536d2672538508d43f60ad2108e5aaea76c192653eaf95d4c3934b7d1dbb6?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/804536d2672538508d43f60ad2108e5aaea76c192653eaf95d4c3934b7d1dbb6?s=96&d=mm&r=g","caption":"Tomasz Borowicz"}}]}},"blocks_vived":[{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2>1. Next.js Conf \ud83d\ude80<\/h2>\n","innerContent":["\n<h2>1. Next.js Conf \ud83d\ude80<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Vercel to jedna z najlepiej dofinansowanych firm zbudowanych wok\u00f3\u0142 otwarto\u017ar\u00f3d\u0142owej technologii. Na przestrzeni ostatnich lat (i 4 rund finansowania), <a href=\"https:\/\/www.crunchbase.com\/organization\/vercel\/company_financials\">firma zgromadzi\u0142a na swoim koncie ponad 300 milion\u00f3w dolar\u00f3w<\/a>. Nale\u017cy przyzna\u0107, \u017ce pieni\u0105dze te zosta\u0142y dobrze zainwestowane. Next.js sta\u0142 si\u0119 w\u0142a\u015bciwie domy\u015blnym rozwi\u0105zaniem je\u015bli chodzi o renderowania Reacta po stronie serwera, a chmura oferowana przez firm\u0119 z roku na rok zyskuje coraz wi\u0119cej sympatyk\u00f3w.<\/p>\n","innerContent":["\n<p>Vercel to jedna z najlepiej dofinansowanych firm zbudowanych wok\u00f3\u0142 otwarto\u017ar\u00f3d\u0142owej technologii. Na przestrzeni ostatnich lat (i 4 rund finansowania), <a href=\"https:\/\/www.crunchbase.com\/organization\/vercel\/company_financials\">firma zgromadzi\u0142a na swoim koncie ponad 300 milion\u00f3w dolar\u00f3w<\/a>. Nale\u017cy przyzna\u0107, \u017ce pieni\u0105dze te zosta\u0142y dobrze zainwestowane. Next.js sta\u0142 si\u0119 w\u0142a\u015bciwie domy\u015blnym rozwi\u0105zaniem je\u015bli chodzi o renderowania Reacta po stronie serwera, a chmura oferowana przez firm\u0119 z roku na rok zyskuje coraz wi\u0119cej sympatyk\u00f3w.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":11578,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/download-37.jpeg\" alt=\"\" class=\"wp-image-11578\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/download-37.jpeg\" alt=\"\" class=\"wp-image-11578\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Sukces Next.js przyci\u0105gn\u0105\u0142 te\u017c na\u015bladowc\u00f3w. W\u015br\u00f3d najwi\u0119kszych rywali wymieni\u0107 nale\u017cy Hydrogen (framework do SSR rozwijany przez Shopify, dedykowany budowaniu sklep\u00f3w przy u\u017cyciu ich platformy) oraz Remix (framework do SSR rozwijany przez tw\u00f3rc\u00f3w react-router). Ten drugi pod wzgl\u0119dem modelu biznesowego mocno przypomina Next.js. R\u00f3wnie\u017c jest on rozwijany budowany wok\u00f3\u0142 otwarto\u017ar\u00f3d\u0142owych technologii (rect-router, Remix) i podobnie jak sw\u00f3j konkurent znalaz\u0142 <a href=\"https:\/\/www.crunchbase.com\/organization\/remix\">inwestor\u00f3w wierz\u0105cych w jego sukces<\/a>. Patrz\u0105c realistycznie na sytuacj\u0119 nale\u017cy jednak zauwa\u017cy\u0107, \u017ce zar\u00f3wno pod wzgl\u0119dem adopcji jak i funduszy, Next.js od konkurencji dzieli przepa\u015b\u0107.<\/p>\n","innerContent":["\n<p>Sukces Next.js przyci\u0105gn\u0105\u0142 te\u017c na\u015bladowc\u00f3w. W\u015br\u00f3d najwi\u0119kszych rywali wymieni\u0107 nale\u017cy Hydrogen (framework do SSR rozwijany przez Shopify, dedykowany budowaniu sklep\u00f3w przy u\u017cyciu ich platformy) oraz Remix (framework do SSR rozwijany przez tw\u00f3rc\u00f3w react-router). Ten drugi pod wzgl\u0119dem modelu biznesowego mocno przypomina Next.js. R\u00f3wnie\u017c jest on rozwijany budowany wok\u00f3\u0142 otwarto\u017ar\u00f3d\u0142owych technologii (rect-router, Remix) i podobnie jak sw\u00f3j konkurent znalaz\u0142 <a href=\"https:\/\/www.crunchbase.com\/organization\/remix\">inwestor\u00f3w wierz\u0105cych w jego sukces<\/a>. Patrz\u0105c realistycznie na sytuacj\u0119 nale\u017cy jednak zauwa\u017cy\u0107, \u017ce zar\u00f3wno pod wzgl\u0119dem adopcji jak i funduszy, Next.js od konkurencji dzieli przepa\u015b\u0107.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Bior\u0105c pod uwag\u0119 popularno\u015b\u0107 i bud\u017cety Next.js, nie dziwi\u0105 oczekiwania jakie naros\u0142y wok\u00f3\u0142 Next.js Conf. Jak si\u0119 okaza\u0142o, nadzieje pok\u0142adane w konferencji zosta\u0142y spe\u0142nione z nawi\u0105zk\u0105. Opr\u00f3cz Next.js 13 i zupe\u0142nie nowego systemu routingu,&nbsp; zaprezentowana zosta\u0142a alternatywa dla Webpack w postaci Turbopack i sporo wi\u0119cej.<\/p>\n","innerContent":["\n<p>Bior\u0105c pod uwag\u0119 popularno\u015b\u0107 i bud\u017cety Next.js, nie dziwi\u0105 oczekiwania jakie naros\u0142y wok\u00f3\u0142 Next.js Conf. Jak si\u0119 okaza\u0142o, nadzieje pok\u0142adane w konferencji zosta\u0142y spe\u0142nione z nawi\u0105zk\u0105. Opr\u00f3cz Next.js 13 i zupe\u0142nie nowego systemu routingu,&nbsp; zaprezentowana zosta\u0142a alternatywa dla Webpack w postaci Turbopack i sporo wi\u0119cej.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":11580,"width":415,"height":332,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/6ymj5i.gif\" alt=\"\" class=\"wp-image-11580\" width=\"415\" height=\"332\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/6ymj5i.gif\" alt=\"\" class=\"wp-image-11580\" width=\"415\" height=\"332\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3>1.1 Nowy routing w Next.js<\/h3>\n","innerContent":["\n<h3>1.1 Nowy routing w Next.js<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p><a href=\"https:\/\/nextjs.org\/blog\/layouts-rfc\">O RFC dotycz\u0105cym nowego routingu w Next.j<\/a>s informowali\u015bmy Was kilka miesi\u0119cy temu w <a href=\"https:\/\/vived.io\/pl\/frontend-thursday-vol-89-koniec-monopolu-webkit-na-ios-lerna-wraca-do-zywych-typescript-4-7\/\">Frontend Weekly vol. 89<\/a> (niestety tylko w j\u0119zyku polskim). Od tego czasu min\u0119\u0142o ju\u017c sporo czasu, do RFC trafi\u0142o kilka zmian, a pierwsza wersja nowego routera jest ju\u017c dost\u0119pna w Next.js 13. Z tego powodu, dzisiaj ponownie przyjrzymy si\u0119 temu tematowi.<\/p>\n","innerContent":["\n<p><a href=\"https:\/\/nextjs.org\/blog\/layouts-rfc\">O RFC dotycz\u0105cym nowego routingu w Next.j<\/a>s informowali\u015bmy Was kilka miesi\u0119cy temu w <a href=\"https:\/\/vived.io\/pl\/frontend-thursday-vol-89-koniec-monopolu-webkit-na-ios-lerna-wraca-do-zywych-typescript-4-7\/\">Frontend Weekly vol. 89<\/a> (niestety tylko w j\u0119zyku polskim). Od tego czasu min\u0119\u0142o ju\u017c sporo czasu, do RFC trafi\u0142o kilka zmian, a pierwsza wersja nowego routera jest ju\u017c dost\u0119pna w Next.js 13. Z tego powodu, dzisiaj ponownie przyjrzymy si\u0119 temu tematowi.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Do tej pory komponent Next.js dopasowywa\u0142 \u015bcie\u017ck\u0119 w pasku przegl\u0105darki do odpowiedniego katalogu, a nast\u0119pnie wy\u015bwietla\u0142 komponent zdefiniowany w pliku index.js. Nowy router zamiast pliku index.js szuka\u0142 b\u0119dzie pliku page.js. Najwi\u0119ksz\u0105 nowo\u015bci\u0105 jest jest fakt, \u017ce Next.js znajdzie r\u00f3wnie\u017c wszystkie pliku layout.js znajduj\u0105ce si\u0119 w \u015bcie\u017cce katalog\u00f3w i wy\u015bwietli je jako \u201copakowanie\u201d naszej strony. Co wa\u017cne, dane zar\u00f3wno dla strony jak i wszystkich layout \u0142adowane b\u0119d\u0105 r\u00f3wnolegle.<\/p>\n","innerContent":["\n<p>Do tej pory komponent Next.js dopasowywa\u0142 \u015bcie\u017ck\u0119 w pasku przegl\u0105darki do odpowiedniego katalogu, a nast\u0119pnie wy\u015bwietla\u0142 komponent zdefiniowany w pliku index.js. Nowy router zamiast pliku index.js szuka\u0142 b\u0119dzie pliku page.js. Najwi\u0119ksz\u0105 nowo\u015bci\u0105 jest jest fakt, \u017ce Next.js znajdzie r\u00f3wnie\u017c wszystkie pliku layout.js znajduj\u0105ce si\u0119 w \u015bcie\u017cce katalog\u00f3w i wy\u015bwietli je jako \u201copakowanie\u201d naszej strony. Co wa\u017cne, dane zar\u00f3wno dla strony jak i wszystkich layout \u0142adowane b\u0119d\u0105 r\u00f3wnolegle.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"id":11582,"sizeSlug":"large","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image size-large\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/nested-layouts-1024x483.jpg\" alt=\"\" class=\"wp-image-11582\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image size-large\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/nested-layouts-1024x483.jpg\" alt=\"\" class=\"wp-image-11582\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"id":11584,"sizeSlug":"large","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image size-large\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/nested-layouts-example-1024x475.jpg\" alt=\"\" class=\"wp-image-11584\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image size-large\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/nested-layouts-example-1024x475.jpg\" alt=\"\" class=\"wp-image-11584\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Kolejn\u0105 nowo\u015bci\u0105 jest r\u00f3wnie\u017c pojawienie si\u0119 plik\u00f3w error.js i loading.js. Te pierwsze wykorzystywane b\u0119d\u0105, kiedy podczas pobierania danych lub renderowania wyst\u0105pi\u0142 nieoczekiwany b\u0142\u0105d. Te drugie wy\u015bwietlane b\u0119d\u0105 zanim wszystkie komponenty w poddrzewie zostan\u0105 wyrenderowane (pod spodem Next.js wykorzystuje usprawniony w React 18 Suspense).<\/p>\n","innerContent":["\n<p>Kolejn\u0105 nowo\u015bci\u0105 jest r\u00f3wnie\u017c pojawienie si\u0119 plik\u00f3w error.js i loading.js. Te pierwsze wykorzystywane b\u0119d\u0105, kiedy podczas pobierania danych lub renderowania wyst\u0105pi\u0142 nieoczekiwany b\u0142\u0105d. Te drugie wy\u015bwietlane b\u0119d\u0105 zanim wszystkie komponenty w poddrzewie zostan\u0105 wyrenderowane (pod spodem Next.js wykorzystuje usprawniony w React 18 Suspense).<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"id":11604,"sizeSlug":"large","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image size-large\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/download-2-1024x526.png\" alt=\"\" class=\"wp-image-11604\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image size-large\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/download-2-1024x526.png\" alt=\"\" class=\"wp-image-11604\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Fundamentaln\u0105 zmian\u0105 w nowym routingu jest r\u00f3wnie\u017c uczynienie React Server Components domy\u015blnym typem komponent\u00f3w. Oznacza, \u017ce tworz\u0105c komponenty uwa\u017ca\u0107 musimy na ograniczenia jakie React narzuca przy korzystaniu React Server Components (ze szczeg\u00f3lnym uwzgl\u0119dnieniem ogranicze\u0144 w mieszaniu ich z Client Components). Oznacza to te\u017c, \u017ce dop\u00f3ki nie zaczniemy definiowa\u0107 Client Components, ca\u0142o\u015b\u0107 naszej aplikacji renderowana b\u0119dzie po stronie serwera. Zachowanie to powinno sprawi\u0107, \u017ce paczka kodu JavaScript wysy\u0142ana do klienta b\u0119dzie ekstremalnie ma\u0142a. Niestety pierwsze testy przeprowadzane przez u\u017cytkownik\u00f3w tego nie potwierdzaj\u0105 i aplikacja renderowana w 100% po stronie serwera nadal wa\u017cy ca\u0142kiem sporo. W sieci nie natrafi\u0142em na oficjalne potwierdzenie, ale prawdopodobnie spora paczka spowodowana jest problemami wieku dzieci\u0119cego Next.js 13.<\/p>\n","innerContent":["\n<p>Fundamentaln\u0105 zmian\u0105 w nowym routingu jest r\u00f3wnie\u017c uczynienie React Server Components domy\u015blnym typem komponent\u00f3w. Oznacza, \u017ce tworz\u0105c komponenty uwa\u017ca\u0107 musimy na ograniczenia jakie React narzuca przy korzystaniu React Server Components (ze szczeg\u00f3lnym uwzgl\u0119dnieniem ogranicze\u0144 w mieszaniu ich z Client Components). Oznacza to te\u017c, \u017ce dop\u00f3ki nie zaczniemy definiowa\u0107 Client Components, ca\u0142o\u015b\u0107 naszej aplikacji renderowana b\u0119dzie po stronie serwera. Zachowanie to powinno sprawi\u0107, \u017ce paczka kodu JavaScript wysy\u0142ana do klienta b\u0119dzie ekstremalnie ma\u0142a. Niestety pierwsze testy przeprowadzane przez u\u017cytkownik\u00f3w tego nie potwierdzaj\u0105 i aplikacja renderowana w 100% po stronie serwera nadal wa\u017cy ca\u0142kiem sporo. W sieci nie natrafi\u0142em na oficjalne potwierdzenie, ale prawdopodobnie spora paczka spowodowana jest problemami wieku dzieci\u0119cego Next.js 13.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/embed","attrs":{"url":"https:\/\/twitter.com\/zachleat\/status\/1584995586918731776","type":"rich","providerNameSlug":"twitter","responsive":true,"align":"center"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-embed aligncenter is-type-rich is-provider-twitter wp-block-embed-twitter\"><div class=\"wp-block-embed__wrapper\">\nhttps:\/\/twitter.com\/zachleat\/status\/1584995586918731776\n<\/div><\/figure>\n","innerContent":["\n<figure class=\"wp-block-embed aligncenter is-type-rich is-provider-twitter wp-block-embed-twitter\"><div class=\"wp-block-embed__wrapper\">\nhttps:\/\/twitter.com\/zachleat\/status\/1584995586918731776\n<\/div><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>To jeszcze nie koniec zmian jakie wprowadza nowy routing. Wchodzimy jednak w obszar skomplikowanych funkcjonalno\u015bci, dlatego wszystkich zainteresowanych szczeg\u00f3\u0142ami odsy\u0142am <a href=\"https:\/\/nextjs.org\/blog\/layouts-rfc\">do oryginalnego RFC<\/a>. Tutaj nadmieni\u0119 tylko, \u017ce znajdziemy w\u015br\u00f3d nich takie pere\u0142ki jak grupowanie \u015bcie\u017cek w domenowe konteksty, strony zawieraj\u0105ce kilka slot\u00f3w , w kt\u00f3re nast\u0119pnie trafiaj\u0105 odpowiednie fragmenty, czy wykorzystanie konwencji znanej z terminala do przechwytywanie zapyta\u0144 z danej strony i na przyk\u0142ad wy\u015bwietlania modala.<\/p>\n","innerContent":["\n<p>To jeszcze nie koniec zmian jakie wprowadza nowy routing. Wchodzimy jednak w obszar skomplikowanych funkcjonalno\u015bci, dlatego wszystkich zainteresowanych szczeg\u00f3\u0142ami odsy\u0142am <a href=\"https:\/\/nextjs.org\/blog\/layouts-rfc\">do oryginalnego RFC<\/a>. Tutaj nadmieni\u0119 tylko, \u017ce znajdziemy w\u015br\u00f3d nich takie pere\u0142ki jak grupowanie \u015bcie\u017cek w domenowe konteksty, strony zawieraj\u0105ce kilka slot\u00f3w , w kt\u00f3re nast\u0119pnie trafiaj\u0105 odpowiednie fragmenty, czy wykorzystanie konwencji znanej z terminala do przechwytywanie zapyta\u0144 z danej strony i na przyk\u0142ad wy\u015bwietlania modala.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":11588,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/6ymg2p.jpeg\" alt=\"\" class=\"wp-image-11588\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/6ymg2p.jpeg\" alt=\"\" class=\"wp-image-11588\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Sekcj\u0119 to chcia\u0142bym zako\u0144czy\u0107 ma\u0142\u0105 krytyk\u0105 w stron\u0119 Next.js z mojej strony. Jako deweloperzy pokochali\u015bmy routing oparty o struktur\u0119 plik\u00f3w ze wzgl\u0119du na jego prostot\u0119. Pojawienie si\u0119 w strukturze plik\u00f3w tak wielu symboli (`[parametr] do przechowywania parametr\u00f3w w \u015bcie\u017cce, `@` do definiowania fragment\u00f3w, `(..)(..)` do przechwytywania zapyta\u0144 i `(nazwa)` do grupowania w domenowe konteksty) sprawia, \u017ce routing staje si\u0119 skomplikowany, a jego zrozumienie wymaga sporo wiedzy domenowej. Zada\u0107 nale\u017cy sobie pytanie, czy routing zdefiniowany w plikach nie jest w tak zaawansowanych przypadkach czytelniejszy? Nie zrozumcie mnie \u017ale, wsparcie dla zagnie\u017cd\u017conych layout\u00f3w, obs\u0142uga b\u0142\u0119d\u00f3w i \u0142adowania oraz wsparcie dla React Server Components to te funkcjonalno\u015bci, kt\u00f3rych Next.js potrzebowa\u0142, ale w mojej g\u0142owie ko\u0142ata pytanie: czy to przypadkiem nie jest ju\u017c jeden krok za daleko?<\/p>\n","innerContent":["\n<p>Sekcj\u0119 to chcia\u0142bym zako\u0144czy\u0107 ma\u0142\u0105 krytyk\u0105 w stron\u0119 Next.js z mojej strony. Jako deweloperzy pokochali\u015bmy routing oparty o struktur\u0119 plik\u00f3w ze wzgl\u0119du na jego prostot\u0119. Pojawienie si\u0119 w strukturze plik\u00f3w tak wielu symboli (`[parametr] do przechowywania parametr\u00f3w w \u015bcie\u017cce, `@` do definiowania fragment\u00f3w, `(..)(..)` do przechwytywania zapyta\u0144 i `(nazwa)` do grupowania w domenowe konteksty) sprawia, \u017ce routing staje si\u0119 skomplikowany, a jego zrozumienie wymaga sporo wiedzy domenowej. Zada\u0107 nale\u017cy sobie pytanie, czy routing zdefiniowany w plikach nie jest w tak zaawansowanych przypadkach czytelniejszy? Nie zrozumcie mnie \u017ale, wsparcie dla zagnie\u017cd\u017conych layout\u00f3w, obs\u0142uga b\u0142\u0119d\u00f3w i \u0142adowania oraz wsparcie dla React Server Components to te funkcjonalno\u015bci, kt\u00f3rych Next.js potrzebowa\u0142, ale w mojej g\u0142owie ko\u0142ata pytanie: czy to przypadkiem nie jest ju\u017c jeden krok za daleko?<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3>1.2 Turbopack, czyli Webpack 6.0<\/h3>\n","innerContent":["\n<h3>1.2 Turbopack, czyli Webpack 6.0<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Wraz ze sporym nap\u0142ywem \u015brodk\u00f3w, Vercel mocno postawi\u0142 na rekrutacj\u0119 znanych osobisto\u015bci ze \u015bwiata JavaScript\u2019u. Do firmy do\u0142\u0105czy\u0142o sporo znanych nazwisk takich jak Tobias Koppers (tw\u00f3rca Webpacka), Jared Palmer (tw\u00f3rca Formika i Turborepo), czy Rich Harris (tw\u00f3rca Svelte). Jak si\u0119 okazuje, ten pierwszy opr\u00f3cz optymalizacj\u0105 Webpacka, zajmowa\u0142 si\u0119 rozwojem zupe\u0142nie nowego narz\u0119dzia do budowania aplikacji - Turbopack.&nbsp;<\/p>\n","innerContent":["\n<p>Wraz ze sporym nap\u0142ywem \u015brodk\u00f3w, Vercel mocno postawi\u0142 na rekrutacj\u0119 znanych osobisto\u015bci ze \u015bwiata JavaScript\u2019u. Do firmy do\u0142\u0105czy\u0142o sporo znanych nazwisk takich jak Tobias Koppers (tw\u00f3rca Webpacka), Jared Palmer (tw\u00f3rca Formika i Turborepo), czy Rich Harris (tw\u00f3rca Svelte). Jak si\u0119 okazuje, ten pierwszy opr\u00f3cz optymalizacj\u0105 Webpacka, zajmowa\u0142 si\u0119 rozwojem zupe\u0142nie nowego narz\u0119dzia do budowania aplikacji - Turbopack.&nbsp;<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":11590,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/download-35.jpeg\" alt=\"\" class=\"wp-image-11590\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/download-35.jpeg\" alt=\"\" class=\"wp-image-11590\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Jak zapowiadaj\u0105 tw\u00f3rcy, Turbopack b\u0119dzie nawet 700x szybszy ni\u017c Webpack i nawet 10x szybszy ni\u017c Vite*! Sk\u0105d tak du\u017cy skok wydajno\u015bci? Jak wi\u0119kszo\u015b\u0107 modnych w 2022 roku narz\u0119dzi deweloperskich dla JavaScript, Turbopack napisany jest w Rust. Na razie Turbopack dost\u0119pny jest w wersji alpha, ale ch\u0119tni mog\u0105 przy jego pomocy budowa\u0107 aplikacje w Next.js 13.&nbsp;<\/p>\n","innerContent":["\n<p>Jak zapowiadaj\u0105 tw\u00f3rcy, Turbopack b\u0119dzie nawet 700x szybszy ni\u017c Webpack i nawet 10x szybszy ni\u017c Vite*! Sk\u0105d tak du\u017cy skok wydajno\u015bci? Jak wi\u0119kszo\u015b\u0107 modnych w 2022 roku narz\u0119dzi deweloperskich dla JavaScript, Turbopack napisany jest w Rust. Na razie Turbopack dost\u0119pny jest w wersji alpha, ale ch\u0119tni mog\u0105 przy jego pomocy budowa\u0107 aplikacje w Next.js 13.&nbsp;<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":11592,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/6ymgbi.jpeg\" alt=\"\" class=\"wp-image-11592\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/6ymgbi.jpeg\" alt=\"\" class=\"wp-image-11592\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Ciekawym aspektem narz\u0119dzi napisanych w Rust (w tym i Turbopack) staje si\u0119 pytanie, czy rozwinie si\u0119 wok\u00f3\u0142 nich r\u00f3wnie \u017cywa spo\u0142eczno\u015b\u0107 wtyczek jak wok\u00f3\u0142 ich JavaScriptowych odpowiednik\u00f3w. Za wtyczkami do webpacka czy babela zazwyczaj stoj\u0105 deweloperzy, kt\u00f3rzy stan\u0119li przed pewnym problemem i postanowili go samodzielnie rozwi\u0105za\u0107. Kiedy wtyczki pisane s\u0105 w j\u0119zyku, w kt\u00f3rym programista pracuje na co dzie\u0144, sytuacja jest stosunkowo prosta. Kiedy rozwi\u0105zanie problemu wymaga\u0107 b\u0119dzie nauki nowego j\u0119zyka (i to takiego du\u017co bardziej niskopoziomowego ni\u017c JavaScript), to mo\u017ce okaza\u0107 si\u0119 to problemem nie do przeskoczenia.&nbsp;<\/p>\n","innerContent":["\n<p>Ciekawym aspektem narz\u0119dzi napisanych w Rust (w tym i Turbopack) staje si\u0119 pytanie, czy rozwinie si\u0119 wok\u00f3\u0142 nich r\u00f3wnie \u017cywa spo\u0142eczno\u015b\u0107 wtyczek jak wok\u00f3\u0142 ich JavaScriptowych odpowiednik\u00f3w. Za wtyczkami do webpacka czy babela zazwyczaj stoj\u0105 deweloperzy, kt\u00f3rzy stan\u0119li przed pewnym problemem i postanowili go samodzielnie rozwi\u0105za\u0107. Kiedy wtyczki pisane s\u0105 w j\u0119zyku, w kt\u00f3rym programista pracuje na co dzie\u0144, sytuacja jest stosunkowo prosta. Kiedy rozwi\u0105zanie problemu wymaga\u0107 b\u0119dzie nauki nowego j\u0119zyka (i to takiego du\u017co bardziej niskopoziomowego ni\u017c JavaScript), to mo\u017ce okaza\u0107 si\u0119 to problemem nie do przeskoczenia.&nbsp;<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":11594,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/6ymgmq.jpeg\" alt=\"\" class=\"wp-image-11594\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/6ymgmq.jpeg\" alt=\"\" class=\"wp-image-11594\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>* Jak wspomnia\u0142 na swoim twitterze sam Evan You, r\u00f3\u017cnica wydajno\u015bci mi\u0119dzy Turbopack i Vite, wynika przede wszystkim z r\u00f3\u017cnic wydajno\u015bci mi\u0119dzy babelem (stosowanym przez Vite), a SWC (stosowanym przez Turbopack). Ten pierwszy jest znacznie wolniejszy, ale posiada bogat\u0105 bibliotek\u0119 wtyczek, natomiast ten drugi jest znacznie szybszy, ale nie oferuje tylu opcji konfiguracji. Co ciekawe, Evan You podkre\u015bla, \u017ce nic nie stoi na przeszkodzie, aby Vite w przysz\u0142o\u015bci r\u00f3wnie\u017c m\u00f3g\u0142 korzysta\u0107 z SWC.&nbsp;<\/p>\n","innerContent":["\n<p>* Jak wspomnia\u0142 na swoim twitterze sam Evan You, r\u00f3\u017cnica wydajno\u015bci mi\u0119dzy Turbopack i Vite, wynika przede wszystkim z r\u00f3\u017cnic wydajno\u015bci mi\u0119dzy babelem (stosowanym przez Vite), a SWC (stosowanym przez Turbopack). Ten pierwszy jest znacznie wolniejszy, ale posiada bogat\u0105 bibliotek\u0119 wtyczek, natomiast ten drugi jest znacznie szybszy, ale nie oferuje tylu opcji konfiguracji. Co ciekawe, Evan You podkre\u015bla, \u017ce nic nie stoi na przeszkodzie, aby Vite w przysz\u0142o\u015bci r\u00f3wnie\u017c m\u00f3g\u0142 korzysta\u0107 z SWC.&nbsp;<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/embed","attrs":{"url":"https:\/\/twitter.com\/youyuxi\/status\/1585040261922820096","type":"rich","providerNameSlug":"twitter","responsive":true,"align":"center"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-embed aligncenter is-type-rich is-provider-twitter wp-block-embed-twitter\"><div class=\"wp-block-embed__wrapper\">\nhttps:\/\/twitter.com\/youyuxi\/status\/1585040261922820096\n<\/div><\/figure>\n","innerContent":["\n<figure class=\"wp-block-embed aligncenter is-type-rich is-provider-twitter wp-block-embed-twitter\"><div class=\"wp-block-embed__wrapper\">\nhttps:\/\/twitter.com\/youyuxi\/status\/1585040261922820096\n<\/div><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3>1.3 `next\/image`<\/h3>\n","innerContent":["\n<h3>1.3 `next\/image`<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Tw\u00f3rcy Next.js od d\u0142u\u017cszego czasu w ramach projektu Aurora wsp\u00f3\u0142pracuj\u0105 z zespo\u0142em rozwijaj\u0105cym Chrome nad popraw\u0105 wydajno\u015bci og\u00f3lnopoj\u0119tego internetu. Pierwszym efektem tej wsp\u00f3\u0142pracy jest dedykowany komponent `Image`, kt\u00f3ry opracowany zosta\u0142 w taki spos\u00f3b, aby optymalizowa\u0107 metryki Core Web Vitals. W\u015br\u00f3d jego funkcjonalno\u015bci znajdziemy mi\u0119dzy innymi:<\/p>\n","innerContent":["\n<p>Tw\u00f3rcy Next.js od d\u0142u\u017cszego czasu w ramach projektu Aurora wsp\u00f3\u0142pracuj\u0105 z zespo\u0142em rozwijaj\u0105cym Chrome nad popraw\u0105 wydajno\u015bci og\u00f3lnopoj\u0119tego internetu. Pierwszym efektem tej wsp\u00f3\u0142pracy jest dedykowany komponent `Image`, kt\u00f3ry opracowany zosta\u0142 w taki spos\u00f3b, aby optymalizowa\u0107 metryki Core Web Vitals. W\u015br\u00f3d jego funkcjonalno\u015bci znajdziemy mi\u0119dzy innymi:<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/list","attrs":[],"innerBlocks":[],"innerHTML":"\n<ul><li>automatycznie pobiera obrazu w rozdzielczo\u015bci odpowiedniej dla danego urz\u0105dzenia<\/li><li>Op\u00f3\u017anianie pobrania obrazu do momentu, kiedy pojawi si\u0119 on w viewport<\/li><li>Rezerwowanie odpowiedniej ilo\u015bci miejsca na stronie, tak aby unikn\u0105\u0107 layout-shift<\/li><\/ul>\n","innerContent":["\n<ul><li>automatycznie pobiera obrazu w rozdzielczo\u015bci odpowiedniej dla danego urz\u0105dzenia<\/li><li>Op\u00f3\u017anianie pobrania obrazu do momentu, kiedy pojawi si\u0119 on w viewport<\/li><li>Rezerwowanie odpowiedniej ilo\u015bci miejsca na stronie, tak aby unikn\u0105\u0107 layout-shift<\/li><\/ul>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":11596,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/6ymgtb.jpeg\" alt=\"\" class=\"wp-image-11596\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/6ymgtb.jpeg\" alt=\"\" class=\"wp-image-11596\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3>1.4 `next\/font`<\/h3>\n","innerContent":["\n<h3>1.4 `next\/font`<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Kolejnym efektem wsp\u00f3\u0142pracy w ramach projektu Aurora&nbsp; jest powstanie zupe\u0142nie nowego systemu obs\u0142ugi czcionek. Od wersji 13, Next.js b\u0119dzie pakowa\u0142 czcionki razem z aplikacj\u0105 i serwowa\u0142 je prosto z serwera. To oznacza, \u017ce pobieranie czcionek nie b\u0119dzie ju\u017c wymaga\u0142o wysy\u0142ania zapyta\u0144 do zewn\u0119trznych serwer\u00f3w!Ponadto Next.js automatycznie dodaje do naszych styli `size-adjust`, co pozwala unikn\u0105\u0107 layout-shift<\/p>\n","innerContent":["\n<p>Kolejnym efektem wsp\u00f3\u0142pracy w ramach projektu Aurora&nbsp; jest powstanie zupe\u0142nie nowego systemu obs\u0142ugi czcionek. Od wersji 13, Next.js b\u0119dzie pakowa\u0142 czcionki razem z aplikacj\u0105 i serwowa\u0142 je prosto z serwera. To oznacza, \u017ce pobieranie czcionek nie b\u0119dzie ju\u017c wymaga\u0142o wysy\u0142ania zapyta\u0144 do zewn\u0119trznych serwer\u00f3w!Ponadto Next.js automatycznie dodaje do naszych styli `size-adjust`, co pozwala unikn\u0105\u0107 layout-shift<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":11598,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/6ymgyr.jpeg\" alt=\"\" class=\"wp-image-11598\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/6ymgyr.jpeg\" alt=\"\" class=\"wp-image-11598\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3>1.5 Prezentacje na d\u0142ugie jesienne wieczory<\/h3>\n","innerContent":["\n<h3>1.5 Prezentacje na d\u0142ugie jesienne wieczory<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Macie tak czasem, \u017ce szukacie fajnych prezentacji z konferencji czy meetup\u00f3w i nie mo\u017cecie znale\u017a\u0107 nic ciekawego? Je\u015bli tak, to mam dla Was dobr\u0105 wiadomo\u015b\u0107! Do sieci trafi\u0142y ju\u017c zapisy nagra\u0144 z Next.js Conf i jest ich naprawd\u0119 sporo. Stawiam dolary przeciwko orzechom, \u017ce znajdziecie tam dla siebie co\u015b ciekawego.<\/p>\n","innerContent":["\n<p>Macie tak czasem, \u017ce szukacie fajnych prezentacji z konferencji czy meetup\u00f3w i nie mo\u017cecie znale\u017a\u0107 nic ciekawego? Je\u015bli tak, to mam dla Was dobr\u0105 wiadomo\u015b\u0107! Do sieci trafi\u0142y ju\u017c zapisy nagra\u0144 z Next.js Conf i jest ich naprawd\u0119 sporo. Stawiam dolary przeciwko orzechom, \u017ce znajdziecie tam dla siebie co\u015b ciekawego.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":{"align":"center"},"innerBlocks":[],"innerHTML":"\n<p class=\"has-text-align-center\"><a href=\"https:\/\/nextjs.org\/conf\">Next.js Keynote<\/a><\/p>\n","innerContent":["\n<p class=\"has-text-align-center\"><a href=\"https:\/\/nextjs.org\/conf\">Next.js Keynote<\/a><\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":{"align":"center"},"innerBlocks":[],"innerHTML":"\n<p class=\"has-text-align-center\"><a href=\"https:\/\/nextjs.org\/conf\/stage\/s\">Next.js Conf Stage S<\/a><\/p>\n","innerContent":["\n<p class=\"has-text-align-center\"><a href=\"https:\/\/nextjs.org\/conf\/stage\/s\">Next.js Conf Stage S<\/a><\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":{"align":"center"},"innerBlocks":[],"innerHTML":"\n<p class=\"has-text-align-center\"><a href=\"https:\/\/nextjs.org\/conf\/stage\/j\">Next.js Conf Stage J<\/a><\/p>\n","innerContent":["\n<p class=\"has-text-align-center\"><a href=\"https:\/\/nextjs.org\/conf\/stage\/j\">Next.js Conf Stage J<\/a><\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3>\u0179r\u00f3d\u0142a:<\/h3>\n","innerContent":["\n<h3>\u0179r\u00f3d\u0142a:<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p><a href=\"https:\/\/nextjs.org\/blog\/next-13\">https:\/\/nextjs.org\/blog\/next-13<\/a><br><a href=\"https:\/\/nextjs.org\/blog\/layouts-rfc#route-groups\">https:\/\/nextjs.org\/blog\/layouts-rfc<\/a><br><a href=\"https:\/\/www.youtube.com\/watch?v=_w0Ikk4JY7U\">https:\/\/www.youtube.com\/watch?v=_w0Ikk4JY7U<\/a><br><a href=\"https:\/\/twitter.com\/dan_abramov\/status\/1585076899126345728\">https:\/\/twitter.com\/dan_abramov\/status\/1585076899126345728<\/a><\/p>\n","innerContent":["\n<p><a href=\"https:\/\/nextjs.org\/blog\/next-13\">https:\/\/nextjs.org\/blog\/next-13<\/a><br><a href=\"https:\/\/nextjs.org\/blog\/layouts-rfc#route-groups\">https:\/\/nextjs.org\/blog\/layouts-rfc<\/a><br><a href=\"https:\/\/www.youtube.com\/watch?v=_w0Ikk4JY7U\">https:\/\/www.youtube.com\/watch?v=_w0Ikk4JY7U<\/a><br><a href=\"https:\/\/twitter.com\/dan_abramov\/status\/1585076899126345728\">https:\/\/twitter.com\/dan_abramov\/status\/1585076899126345728<\/a><\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2>2. Angular 14.2<\/h2>\n","innerContent":["\n<h2>2. Angular 14.2<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Ostatnio nasze przegl\u0105dy zdecydowanie zdominowane zosta\u0142y przez Reacta. Dzisiaj mamy jednak kr\u00f3tk\u0105 wstawk\u0119 dla wszystkich fan\u00f3w Angulara. Wersja 15 jest ju\u017c tu\u017c za rogiem, bo jej premiera nast\u0105pi w okolicach po\u0142owy listopada. W mi\u0119dzyczasie zesp\u00f3\u0142 Google uraczy\u0142 nas ca\u0142kiem ciekawie wygl\u0105daj\u0105ca wersj\u0105 minor 14.2.<\/p>\n","innerContent":["\n<p>Ostatnio nasze przegl\u0105dy zdecydowanie zdominowane zosta\u0142y przez Reacta. Dzisiaj mamy jednak kr\u00f3tk\u0105 wstawk\u0119 dla wszystkich fan\u00f3w Angulara. Wersja 15 jest ju\u017c tu\u017c za rogiem, bo jej premiera nast\u0105pi w okolicach po\u0142owy listopada. W mi\u0119dzyczasie zesp\u00f3\u0142 Google uraczy\u0142 nas ca\u0142kiem ciekawie wygl\u0105daj\u0105ca wersj\u0105 minor 14.2.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>.<\/p>\n","innerContent":["\n<p>.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":11600,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/6ymh7u.jpeg\" alt=\"\" class=\"wp-image-11600\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/6ymh7u.jpeg\" alt=\"\" class=\"wp-image-11600\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Do Angulara 14.2 trafi\u0142o API, kt\u00f3re pozwala na konfiguracj\u0119 routera poprzez kompozycj\u0119 odpowiednich funkcji. Taka architektura pozwala na zastosowanie tree-shaking wobec kodu dotycz\u0105cego routingu. Jak podaj\u0105 tw\u00f3rcy, usprawnienie to odchudza kod routingu \u015brednio o ponad 10%!<\/p>\n","innerContent":["\n<p>Do Angulara 14.2 trafi\u0142o API, kt\u00f3re pozwala na konfiguracj\u0119 routera poprzez kompozycj\u0119 odpowiednich funkcji. Taka architektura pozwala na zastosowanie tree-shaking wobec kodu dotycz\u0105cego routingu. Jak podaj\u0105 tw\u00f3rcy, usprawnienie to odchudza kod routingu \u015brednio o ponad 10%!<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"prismatic\/blocks","attrs":{"language":"typescript"},"innerBlocks":[],"innerHTML":"\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-typescript\">\/\/ Before Angular 14.2\nconst appRoutes: Routes = [\u2026];\nbootstrapApplication(AppComponent, {\n  providers: [\n    importProvidersFrom(RouterModule.forRoot(appRoutes), {\n      preloadingStrategy: PreloadAllModules\n    }),\n  ]\n});\n\n\/\/ Angular 14.2\nconst appRoutes: Routes = [];\nbootstrapApplication(AppComponent, {\n  providers: [\n    provideRouter(appRoutes, withPreloading(PreloadAllModules))\n  ]\n});<\/code><\/pre>\n","innerContent":["\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-typescript\">\/\/ Before Angular 14.2\nconst appRoutes: Routes = [\u2026];\nbootstrapApplication(AppComponent, {\n  providers: [\n    importProvidersFrom(RouterModule.forRoot(appRoutes), {\n      preloadingStrategy: PreloadAllModules\n    }),\n  ]\n});\n\n\/\/ Angular 14.2\nconst appRoutes: Routes = [];\nbootstrapApplication(AppComponent, {\n  providers: [\n    provideRouter(appRoutes, withPreloading(PreloadAllModules))\n  ]\n});<\/code><\/pre>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Kolejna nowo\u015b\u0107 w Angularze 14.2, to mo\u017cliwo\u015b\u0107 definiowania functional guard. W po\u0142\u0105czeniu z dodan\u0105 w Angularze 14 funkcj\u0105 <code>inject()<\/code> mo\u017cliwe jest wi\u0119c zast\u0105pienie w\u0142a\u015bciwie wszystkich guard\u00f3w prost\u0105 funkcj\u0105.<\/p>\n","innerContent":["\n<p>Kolejna nowo\u015b\u0107 w Angularze 14.2, to mo\u017cliwo\u015b\u0107 definiowania functional guard. W po\u0142\u0105czeniu z dodan\u0105 w Angularze 14 funkcj\u0105 <code>inject()<\/code> mo\u017cliwe jest wi\u0119c zast\u0105pienie w\u0142a\u015bciwie wszystkich guard\u00f3w prost\u0105 funkcj\u0105.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"prismatic\/blocks","attrs":{"language":"typescript"},"innerBlocks":[],"innerHTML":"\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-typescript\">const route = {\n  path: \u2018edit\u2019,\n  component: EditCmp,\n  canDeactivate: [\n    (component: EditCmp) => !component.hasUnsavedChanges\n  ]\n};<\/code><\/pre>\n","innerContent":["\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-typescript\">const route = {\n  path: \u2018edit\u2019,\n  component: EditCmp,\n  canDeactivate: [\n    (component: EditCmp) => !component.hasUnsavedChanges\n  ]\n};<\/code><\/pre>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Niew\u0105tpliw\u0105 zalet\u0105 takiej architektury jest r\u00f3wnie\u017c prostota parametryzacji guard\u00f3w: zamiast przekazywa\u0107 i czyta\u0107 dane z ActivatedRouteSnapshot, mo\u017cemy po prostu przekaza\u0107 je jako argumenty funkcji.<\/p>\n","innerContent":["\n<p>Niew\u0105tpliw\u0105 zalet\u0105 takiej architektury jest r\u00f3wnie\u017c prostota parametryzacji guard\u00f3w: zamiast przekazywa\u0107 i czyta\u0107 dane z ActivatedRouteSnapshot, mo\u017cemy po prostu przekaza\u0107 je jako argumenty funkcji.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"prismatic\/blocks","attrs":{"language":"typescript"},"innerBlocks":[],"innerHTML":"\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-typescript\">const route = {\n  path: \u2018edit\u2019,\n  component: EditCmp,\n  canActivate: [allowedUserTypes([\u2018ADMIN\u2019, \u2018SUPER_ADMIN\u2019])]\n};<\/code><\/pre>\n","innerContent":["\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-typescript\">const route = {\n  path: \u2018edit\u2019,\n  component: EditCmp,\n  canActivate: [allowedUserTypes([\u2018ADMIN\u2019, \u2018SUPER_ADMIN\u2019])]\n};<\/code><\/pre>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3>\u0179r\u00f3d\u0142a:<\/h3>\n","innerContent":["\n<h3>\u0179r\u00f3d\u0142a:<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p><a href=\"https:\/\/blog.angular.io\/advancements-in-the-angular-router-5d69ec4c032\">https:\/\/blog.angular.io\/advancements-in-the-angular-router-5d69ec4c032<\/a><br><a href=\"https:\/\/netbasal.com\/using-the-angular-http-client-in-angular-v15-f4bec3c11926\">https:\/\/netbasal.com\/using-the-angular-http-client-in-angular-v15-f4bec3c11926<\/a><\/p>\n","innerContent":["\n<p><a href=\"https:\/\/blog.angular.io\/advancements-in-the-angular-router-5d69ec4c032\">https:\/\/blog.angular.io\/advancements-in-the-angular-router-5d69ec4c032<\/a><br><a href=\"https:\/\/netbasal.com\/using-the-angular-http-client-in-angular-v15-f4bec3c11926\">https:\/\/netbasal.com\/using-the-angular-http-client-in-angular-v15-f4bec3c11926<\/a><\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2>3. Vite Conf<\/h2>\n","innerContent":["\n<h2>3. Vite Conf<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Konferencja Vite nie by\u0142a tak obfita w nowo\u015bci jak Next.js Conf. Nie oznacza to, \u017ce nie przemkn\u0119\u0142o si\u0119 na niej kilka mniejszych i wi\u0119kszych nowo\u015bci. Najciekawsz\u0105 z nich jest <a href=\"https:\/\/stackblitz.com\/codeflow\">StackBlitz Codeflow<\/a>, kt\u00f3ry umo\u017cliwia szybkie sklonowanie projektu w przegl\u0105darce i natychmiastowe uruchomienie aplikacji (dzi\u0119ki <a href=\"https:\/\/blog.stackblitz.com\/posts\/introducing-webcontainers\/\">WebContainers<\/a> mo\u017cliwe jest r\u00f3wnie\u017c uruchomienie serwerowych aplikacji). Ca\u0142o\u015b\u0107 sprawdza si\u0119 idealnie zw\u0142aszcza przy Code Review, kiedy to szybko mo\u017cemy zobaczy\u0107 efekty wprowadzonych zmian i r\u00f3wnocze\u015bnie nie musimy zaci\u0105ga\u0107 ich na nasz komputer.<\/p>\n","innerContent":["\n<p>Konferencja Vite nie by\u0142a tak obfita w nowo\u015bci jak Next.js Conf. Nie oznacza to, \u017ce nie przemkn\u0119\u0142o si\u0119 na niej kilka mniejszych i wi\u0119kszych nowo\u015bci. Najciekawsz\u0105 z nich jest <a href=\"https:\/\/stackblitz.com\/codeflow\">StackBlitz Codeflow<\/a>, kt\u00f3ry umo\u017cliwia szybkie sklonowanie projektu w przegl\u0105darce i natychmiastowe uruchomienie aplikacji (dzi\u0119ki <a href=\"https:\/\/blog.stackblitz.com\/posts\/introducing-webcontainers\/\">WebContainers<\/a> mo\u017cliwe jest r\u00f3wnie\u017c uruchomienie serwerowych aplikacji). Ca\u0142o\u015b\u0107 sprawdza si\u0119 idealnie zw\u0142aszcza przy Code Review, kiedy to szybko mo\u017cemy zobaczy\u0107 efekty wprowadzonych zmian i r\u00f3wnocze\u015bnie nie musimy zaci\u0105ga\u0107 ich na nasz komputer.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p><\/p>\n","innerContent":["\n<p><\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Je\u015bli po przebrni\u0119ciu przez nagrania z Next.js Conf nadal nie macie dosy\u0107, to mi\u0142o mi poinformowa\u0107, \u017ce na YouTube trafi\u0142 r\u00f3wnie\u017c<a href=\"https:\/\/viteconf.org\/2022\/replay\"> zapis z ponad 40 prezentacji z Vite Conf<\/a>. I nie dajcie si\u0119 zmyli\u0107 nazwie - w\u015br\u00f3d temat\u00f3w znajdziecie r\u00f3wnie\u017c&nbsp; Storybooka, Ladle (alternatywa dla Storybook od Ubera), Angulara, Astro czy Solid.js. Nie wiem jak Wy, ale ja mam co ogl\u0105da\u0107 do porannej kawy przez co najmniej najbli\u017csze p\u00f3\u0142 roku.<\/p>\n","innerContent":["\n<p>Je\u015bli po przebrni\u0119ciu przez nagrania z Next.js Conf nadal nie macie dosy\u0107, to mi\u0142o mi poinformowa\u0107, \u017ce na YouTube trafi\u0142 r\u00f3wnie\u017c<a href=\"https:\/\/viteconf.org\/2022\/replay\"> zapis z ponad 40 prezentacji z Vite Conf<\/a>. I nie dajcie si\u0119 zmyli\u0107 nazwie - w\u015br\u00f3d temat\u00f3w znajdziecie r\u00f3wnie\u017c&nbsp; Storybooka, Ladle (alternatywa dla Storybook od Ubera), Angulara, Astro czy Solid.js. Nie wiem jak Wy, ale ja mam co ogl\u0105da\u0107 do porannej kawy przez co najmniej najbli\u017csze p\u00f3\u0142 roku.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":11602,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/download-36.jpeg\" alt=\"\" class=\"wp-image-11602\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/download-36.jpeg\" alt=\"\" class=\"wp-image-11602\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3>\u0179r\u00f3d\u0142a<\/h3>\n","innerContent":["\n<h3>\u0179r\u00f3d\u0142a<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p><a href=\"https:\/\/viteconf.org\/2022\/replay\">https:\/\/viteconf.org\/2022\/replay<\/a><br><a href=\"https:\/\/stackblitz.com\/codeflow\">https:\/\/stackblitz.com\/codeflow<\/a><\/p>\n","innerContent":["\n<p><a href=\"https:\/\/viteconf.org\/2022\/replay\">https:\/\/viteconf.org\/2022\/replay<\/a><br><a href=\"https:\/\/stackblitz.com\/codeflow\">https:\/\/stackblitz.com\/codeflow<\/a><\/p>\n"]}],"_links":{"self":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/11577","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/users\/12"}],"replies":[{"embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/comments?post=11577"}],"version-history":[{"count":7,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/11577\/revisions"}],"predecessor-version":[{"id":11616,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/11577\/revisions\/11616"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/media\/11606"}],"wp:attachment":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/media?parent=11577"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/categories?post=11577"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/tags?post=11577"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}