{"id":28748,"date":"2024-08-26T05:00:00","date_gmt":"2024-08-26T03:00:00","guid":{"rendered":"https:\/\/sii.pl\/blog\/?p=28748"},"modified":"2024-08-26T08:33:36","modified_gmt":"2024-08-26T06:33:36","slug":"podstawy-vite-co-warto-wiedziec-o-alternatywie-dla-webpacka","status":"publish","type":"post","link":"https:\/\/sii.pl\/blog\/podstawy-vite-co-warto-wiedziec-o-alternatywie-dla-webpacka\/","title":{"rendered":"Podstawy Vite \u2013 co warto wiedzie\u0107 o alternatywie dla Webpacka"},"content":{"rendered":"\n<p>W erze przed wprowadzeniem modu\u0142\u00f3w ES w przegl\u0105darkach programi\u015bci JavaScript nie mieli natywnej mo\u017cliwo\u015bci tworzenia kodu w spos\u00f3b modularny. Z tego powodu narodzi\u0142a si\u0119 koncepcja bundlingu \u2013 u\u017cywania narz\u0119dzi do przetwarzania i \u0142\u0105czenia modu\u0142\u00f3w \u017ar\u00f3d\u0142owych w pliki gotowe do uruchomienia w przegl\u0105darce. Na przestrzeni lat narz\u0119dzia takie jak Webpack, Rollup i Parcel znacznie usprawni\u0142y prac\u0119 frontendowych deweloper\u00f3w. Jednak \u2013 wraz z rosn\u0105cymi wymaganiami aplikacji \u2013 pojawi\u0142y si\u0119 nowe wyzwania.<\/p>\n\n\n\n<p>Du\u017ce projekty mog\u0105 zawiera\u0107 tysi\u0105ce modu\u0142\u00f3w, co powoduje znacz\u0105ce problemy z wydajno\u015bci\u0105 \u2013 d\u0142ugie czasy uruchamiania serwer\u00f3w deweloperskich oraz op\u00f3\u017anienia w aktualizacjach plik\u00f3w. Te problemy negatywnie wp\u0142ywaj\u0105 na produktywno\u015b\u0107 i satysfakcj\u0119 programist\u00f3w.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Czym jest<\/strong> Vite?<\/h2>\n\n\n\n<p>Vite jest nowoczesnym narz\u0119dziem, kt\u00f3re stara si\u0119 rozwi\u0105za\u0107 opisane wy\u017cej problemy, wykorzystuj\u0105c najnowsze osi\u0105gni\u0119cia w ekosystemie JavaScript. Nale\u017c\u0105 do nich natywne modu\u0142y ES w przegl\u0105darkach oraz narz\u0119dzia napisane w j\u0119zykach kompilowanych do kodu maszynowego, np. Go.<\/p>\n\n\n\n<p>Vite umo\u017cliwia b\u0142yskawiczne uruchamianie serwer\u00f3w deweloperskich oraz szybkie aktualizacje modu\u0142\u00f3w, niezale\u017cnie od wielko\u015bci aplikacji. Dzi\u0119ki tym innowacjom, Vite staje si\u0119 niezast\u0105pionym narz\u0119dziem w pracy nowoczesnych programist\u00f3w frontendowych.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Czego potrzebujemy, aby zacz\u0105\u0107 prac\u0119 z Vite?<\/strong><\/h2>\n\n\n\n<p>Zacznijmy od przygotowania naszego \u015brodowiska do pracy z Vite w wersji 5. B\u0119d\u0105 nam potrzebne:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>node.js w wersji 18+,<\/li>\n\n\n\n<li>npm (node package manager) do odpalenia skrypt\u00f3w (lub yarn, bun).<\/li>\n<\/ul>\n\n\n\n<p>Aby sprawdzi\u0107, czy posiadacie zainstalowane oprogramowanie na swoim sprz\u0119cie, odpalcie kolejno:<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/08\/image1-2.png\"><img decoding=\"async\" width=\"800\" height=\"92\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/08\/image1-2.png\" alt=\"node -v i npm -v\" class=\"wp-image-28749\" style=\"object-fit:cover\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/08\/image1-2.png 800w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/08\/image1-2-300x35.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/08\/image1-2-768x88.png 768w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/><\/a><\/figure>\n\n\n\n<p>Je\u015bli jednak go nie posiadacie, w prosty spos\u00f3b mo\u017cecie je zainstalowa\u0107 na swojej maszynie.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Tworzenie nowego projektu<\/strong><\/h2>\n\n\n\n<p>Aby stworzy\u0107 nowy projekt, otw\u00f3rzmy terminal, a nast\u0119pnie:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>W\u0142\u0105cz poni\u017csz\u0105 komend\u0119 w celu rozpocz\u0119cia tworzenia projektu.<\/li>\n<\/ol>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/08\/image2-4.png\"><img decoding=\"async\" width=\"1024\" height=\"28\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/08\/image2-4-1024x28.png\" alt=\"npm create vite@latest\" class=\"wp-image-28751\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/08\/image2-4-1024x28.png 1024w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/08\/image2-4-300x8.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/08\/image2-4-768x21.png 768w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/08\/image2-4.png 1160w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<ol class=\"wp-block-list\" start=\"2\">\n<li>Opcjonalnie mo\u017ce wyskoczy\u0107 pytanie o instalacj\u0119 paczek \u2013 wpisujemy \u201ey\u201d i klikamy enter.<\/li>\n\n\n\n<li>Wpisujemy nazw\u0119 naszego projektu i go zatwierdzamy, klikaj\u0105c enter.<\/li>\n<\/ol>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/08\/image3-3.png\"><img decoding=\"async\" width=\"1024\" height=\"245\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/08\/image3-3-1024x245.png\" alt=\"Select a framework\" class=\"wp-image-28753\" style=\"object-fit:cover\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/08\/image3-3-1024x245.png 1024w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/08\/image3-3-300x72.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/08\/image3-3-768x184.png 768w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/08\/image3-3.png 1230w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<ol class=\"wp-block-list\" start=\"4\">\n<li>Wybieramy technologi\u0119, w jakiej chcemy tworzy\u0107 nasz\u0105 aplikacj\u0119.<\/li>\n\n\n\n<li>Po wybraniu technologii czas na zmian\u0119 ewentualnego wariantu, czyli w naszym przypadku j\u0119zyka, w kt\u00f3rym b\u0119dziemy tworzy\u0107 aplikacj\u0119:<\/li>\n<\/ol>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/08\/image4-3.png\"><img decoding=\"async\" width=\"1024\" height=\"161\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/08\/image4-3-1024x161.png\" alt=\"Select a variant\" class=\"wp-image-28755\" style=\"object-fit:cover\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/08\/image4-3-1024x161.png 1024w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/08\/image4-3-300x47.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/08\/image4-3-768x121.png 768w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/08\/image4-3.png 1194w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<ol class=\"wp-block-list\" start=\"6\">\n<li>Po zainstalowaniu paczek wykonujemy poni\u017cszy skrypt, kt\u00f3ry pozwala nam wej\u015b\u0107 do projektu, zainstalowa\u0107 paczki oraz odpali\u0107 serwer:<\/li>\n<\/ol>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/08\/image5-4.png\"><img decoding=\"async\" width=\"860\" height=\"28\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/08\/image5-4.png\" alt=\"cd my-project\" class=\"wp-image-28757\" style=\"object-fit:cover\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/08\/image5-4.png 860w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/08\/image5-4-300x10.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/08\/image5-4-768x25.png 768w\" sizes=\"(max-width: 860px) 100vw, 860px\" \/><\/a><\/figure>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/08\/Obraz1.png\"><img decoding=\"async\" width=\"860\" height=\"32\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/08\/Obraz1.png\" alt=\"npm i\" class=\"wp-image-28761\" style=\"object-fit:cover\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/08\/Obraz1.png 860w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/08\/Obraz1-300x11.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/08\/Obraz1-768x29.png 768w\" sizes=\"(max-width: 860px) 100vw, 860px\" \/><\/a><\/figure>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/08\/Obraz2.png\"><img decoding=\"async\" width=\"860\" height=\"36\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/08\/Obraz2.png\" alt=\"npm run dev\" class=\"wp-image-28763\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/08\/Obraz2.png 860w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/08\/Obraz2-300x13.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/08\/Obraz2-768x32.png 768w\" sizes=\"(max-width: 860px) 100vw, 860px\" \/><\/a><\/figure>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/08\/image8-2.png\"><img decoding=\"async\" width=\"1024\" height=\"111\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/08\/image8-2-1024x111.png\" alt=\"VITE v5.3.4\" class=\"wp-image-28765\" style=\"object-fit:cover\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/08\/image8-2-1024x111.png 1024w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/08\/image8-2-300x33.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/08\/image8-2-768x84.png 768w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/08\/image8-2-1536x167.png 1536w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/08\/image8-2.png 1654w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p>Po kilku sekundach dostaniemy informacje, na jakim porcie dzia\u0142a nasza aplikacja.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Co oferuje Vite?<\/strong><\/h2>\n\n\n\n<p>Wiemy ju\u017c, jak postawi\u0107 swoja pierwsz\u0105 aplikacj\u0119 z u\u017cyciem Vite. Przyszed\u0142 czas na poznanie funkcjonalno\u015bci, jakie narz\u0119dzie nam oferuje.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Hot Module Replacement (HMR)<\/strong><\/h3>\n\n\n\n<p>Vite dostarcza API do HMR oparte na natywnym ESM. Dzi\u0119ki temu projekty z wbudowan\u0105 obs\u0142ug\u0105 HMR mog\u0105 oferowa\u0107 natychmiastowe i precyzyjne aktualizacje bez prze\u0142adowania strony, co pozwala na zachowanie stanu aplikacji oraz przyspieszony development.<\/p>\n\n\n\n<p>Jakie s\u0105 <strong>zalety HMR<\/strong> w Vite na tle Webpack? Nale\u017c\u0105 do nich:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Szybko\u015b\u0107 \u2013 Vite wykorzystuje esbuild do transformacji i budowania zale\u017cno\u015bci, co jest znacznie szybsze ni\u017c tradycyjne narz\u0119dzia bundlingowe oparte na JavaScript.<\/li>\n\n\n\n<li>Natywne ES modules \u2013 Vite korzysta z natywnych ES Modules obs\u0142ugiwanych bezpo\u015brednio przez przegl\u0105darki, co eliminuje potrzeb\u0119 dodatkowego bundlingu i pozwala na bardziej efektywne zarz\u0105dzanie zale\u017cno\u015bciami.<\/li>\n\n\n\n<li>Zapami\u0119tanie stanu \u2013 HMR w Vite pozwala na zachowanie aktualnego stanu aplikacji podczas wymiany modu\u0142\u00f3w, co jest kluczowe dla efektywnego i szybkiego debugowania oraz developmentu.<\/li>\n\n\n\n<li>Prostota i wygoda \u2013 Vite automatycznie konfiguruje HMR dla popularnych framework\u00f3w, co upraszcza proces tworzenia nowych projekt\u00f3w.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Pre-building i NPM dependencies<\/strong><\/h3>\n\n\n\n<p>Natywne ES importy nie wspieraj\u0105 popularnych w wi\u0119kszo\u015bci projekt\u00f3w import\u00f3w modu\u0142\u00f3w. Z racji tego, \u017ce taki zapis spowodowa\u0142by b\u0142\u0105d w przegl\u0105darce, Vite wyszukuje wszystkie takie importy i wykonuje nast\u0119puj\u0105ce czynno\u015bci:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Wst\u0119pny bundling \u2013 w celu przyspieszenia strony konwertuje modu\u0142y CommonJS do ESM. Proces ten jest realizowany za pomoc\u0105 <a href=\"https:\/\/esbuild.github.io\/\" target=\"_blank\" aria-label=\" (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\" rel=\"nofollow\" >esbuild<\/a> bundlera, co znacz\u0105co przyspiesza start aplikacji.<\/li>\n\n\n\n<li>Przepisuje importy na URL-e, cytuj\u0105c przyk\u0142ad z dokumentacji: \u201e<em>\/node_modules\/.vite\/deps\/my-dep.js?v=f3sf2ebd\u201d,<\/em><strong> <\/strong>co pozwala przegl\u0105darce na zaimportowanie pliku.<\/li>\n<\/ol>\n\n\n\n<p>Dodatkowo, w celu przyspieszenia tego procesu, Vite u\u017cywa cache do zapami\u0119tania ju\u017c wcze\u015bniej zaimportowanych plik\u00f3w, przez co nie musi ponownie ich pobiera\u0107 z serwera.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Transpilacja kodu TypeScript<\/strong><\/h3>\n\n\n\n<p>Vite przetwarza pliki .ts poprzez transpilacj\u0119, ale nie wykonuje sprawdzania typ\u00f3w. Narz\u0119dzie zak\u0142ada, \u017ce sprawdzanie typ\u00f3w jest obs\u0142ugiwane przez IDE i proces budowania projektu.<\/p>\n\n\n\n<p>Dlaczego Vite nie sprawdza typ\u00f3w? Transpilacja i sprawdzanie typ\u00f3w to dwa r\u00f3\u017cne procesy:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>&nbsp;Transpilacja \u2013 przetwarza ka\u017cdy plik osobno, co idealnie pasuje do modelu kompilacji na \u017c\u0105danie w Vite.<\/li>\n\n\n\n<li>&nbsp;Sprawdzanie typ\u00f3w \u2013 wymaga analizy ca\u0142ego grafu modu\u0142\u00f3w, co spowolni\u0142oby Vite.<\/li>\n<\/ul>\n\n\n\n<p>Vite koncentruje si\u0119 na szybkim przetwarzaniu modu\u0142\u00f3w, aby mog\u0142y dzia\u0142a\u0107 w przegl\u0105darce jak najszybciej. Dlatego zalecam oddzielne uruchamianie narz\u0119dzi do analizy statycznej, takich jak ESLint.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Pozosta\u0142e funkcjonalno\u015bci<\/strong><\/h2>\n\n\n\n<p>Wspomnia\u0142em ju\u017c o najwa\u017cniejszych kwestiach, kt\u00f3re pozwalaj\u0105 Vite wyr\u00f3\u017cnia\u0107 si\u0119 na tle konkurencji swoj\u0105 szybko\u015bci\u0105. Warto napomkn\u0105\u0107 o innych zaletach, kt\u00f3re, podobnie jak w innych narz\u0119dziach takich jak np. Webpack, s\u0105 tak\u017ce wspierane.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>JSON import <\/strong><\/h3>\n\n\n\n<p>Pliki JSON mog\u0105 by\u0107 bezpo\u015brednio pobierane do naszego pliku oraz wykorzystane w kodzie.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Statyczne assety<\/strong><\/h3>\n\n\n\n<p>Importowanie statycznych asset\u00f3w spowoduje zwr\u00f3cenie adresu URL po jego udost\u0119pnieniu.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Dynamiczne importy<\/strong><\/h3>\n\n\n\n<p>Vite, opr\u00f3cz importu globalnego, umo\u017cliwia r\u00f3wnie\u017c dynamiczny import z wykorzystaniem zmiennych. Jest to funkcjonalno\u015b\u0107 podobna do importu globalnego, ale dzia\u0142a w nieco inny spos\u00f3b. Nale\u017cy pami\u0119ta\u0107, \u017ce zmienne u\u017cywane w dynamicznym imporcie reprezentuj\u0105 nazwy plik\u00f3w tylko na jednym poziomie g\u0142\u0119boko\u015bci struktury katalog\u00f3w. Oznacza to, \u017ce je\u015bli zmienna zawiera \u015bcie\u017ck\u0119 do pliku w podkatalogu, import nie powiedzie si\u0119.<\/p>\n\n\n\n<p>W przypadku bardziej z\u0142o\u017conych scenariuszy, wymagaj\u0105cych dost\u0119pu do plik\u00f3w w g\u0142\u0119bszych strukturach katalog\u00f3w, zaleca si\u0119 korzystanie z funkcji importu globalnego. Ta metoda oferuje wi\u0119ksze mo\u017cliwo\u015bci i elastyczno\u015b\u0107 w zarz\u0105dzaniu importami w bardziej rozbudowanych projektach.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>CSS<\/strong><\/h3>\n\n\n\n<p>Vite pozwala na pobieranie plik\u00f3w css i wstrzykiwanie ich w tag styles, co pozwala na wykorzystanie HMR i przyspieszenie budowania aplikacji. Dodatkowo, Vite wspiera ca\u0142\u0105 gam\u0119 technologii i sposob\u00f3w pisania styli, takich jak css modules, PostCSS czy pre-procesory.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Pluginy<\/strong><\/h3>\n\n\n\n<p>Tak jak Webpack, Vite umo\u017cliwia rozbudow\u0119 jego funkcjonalno\u015bci o dodatkowe pluginy. Bazuj\u0105 one na Rollup, dzi\u0119ki czemu developerzy mog\u0105 korzysta\u0107 z bogatego ekosystemu gotowych rozwi\u0105za\u0144. Przyk\u0142adowo, dzi\u0119ki plugin mo\u017cemy zwi\u0119kszy\u0107 funkcjonalno\u015b\u0107 serwera deweloperskiego lub wprowadzi\u0107 SSR w naszym projekcie.<\/p>\n\n\n\n<p>Poni\u017cej znajduje si\u0119 przyk\u0142adowy kawa\u0142ek kodu, kt\u00f3ry za pomoc\u0105 pluginu o nazwie <em>vite-plugin-ssr\/plugin <\/em>umo\u017cliwia<em> <\/em>implementacj\u0119 SSR w naszym projekcie:<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/08\/image9-3.png\"><img decoding=\"async\" width=\"1024\" height=\"144\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/08\/image9-3-1024x144.png\" alt=\"import\" class=\"wp-image-28768\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/08\/image9-3-1024x144.png 1024w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/08\/image9-3-300x42.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/08\/image9-3-768x108.png 768w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/08\/image9-3-1536x216.png 1536w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/08\/image9-3.png 2038w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p>Jak wida\u0107, dodanie obs\u0142ugi SSR w projekcie by\u0142o proste jak nigdy dot\u0105d.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Wydajno\u015b\u0107<\/strong><\/h2>\n\n\n\n<p>Vite jest narz\u0119dziem, kt\u00f3re od razu zajmie si\u0119 wydajno\u015bci\u0105 aplikacji. Jednak w zwi\u0105zku z tym, jak szybko rosn\u0105 wymagania projektu, warto zwr\u00f3ci\u0107 uwag\u0119 na kilka kwestii.<\/p>\n\n\n\n<p>Na potrzeby tego artyku\u0142u zaczerpnijmy troch\u0119 informacji z wpisu innego programisty: <a href=\"https:\/\/betterprogramming.pub\/is-vite-really-faster-than-webpack-b414f6cc751c\" target=\"_blank\" aria-label=\" (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\" rel=\"nofollow\" >Is Vite Really Faster Than Webpack?<\/a>. Interesuje nas aplikacja, jak\u0105 stworzy\u0142 i zamie\u015bci\u0142 na <a href=\"https:\/\/github.com\/grumd\/vite-vs-webpack\" target=\"_blank\" aria-label=\" (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\" rel=\"nofollow\" >GitHub<\/a><strong>. <\/strong>&nbsp;Przygotowa\u0142 on mini projekt, kt\u00f3ry por\u00f3wnuje czas budowania aplikacji oraz \u0142adowania w przegl\u0105darce w zale\u017cno\u015bci od tego, czy u\u017cyjemy Vite, czy Webpack. Zestawia tak\u017ce, ile komponent\u00f3w znajduje si\u0119 w naszej aplikacji. <\/p>\n\n\n\n<p>Poni\u017cej za\u0142\u0105czam zdj\u0119cie dodane przez autora.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large is-resized\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/08\/image10-2.png\"><img decoding=\"async\" width=\"1024\" height=\"793\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/08\/image10-2-1024x793.png\" alt=\"Por\u00f3wnanie Vite i Webpack\" class=\"wp-image-28770\" style=\"width:615px;height:auto\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/08\/image10-2-1024x793.png 1024w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/08\/image10-2-300x232.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/08\/image10-2-768x595.png 768w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/08\/image10-2.png 1043w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">Ryc. 1 <a href=\"https:\/\/betterprogramming.pub\/is-vite-really-faster-than-webpack-b414f6cc751c\" target=\"_blank\" aria-label=\" (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\" rel=\"nofollow\" >Por\u00f3wnanie Vite i Webpack<\/a><\/figcaption><\/figure>\n\n\n\n<p>Jak wida\u0107, Vite ma spor\u0105 przewag\u0119, przynajmniej na pocz\u0105tku. Kiedy jednak liczba komponent\u00f3w wzrasta, czas \u0142adowania aplikacji w przegl\u0105darce wyd\u0142u\u017ca si\u0119 znacz\u0105co na korzy\u015b\u0107 Webpacka. Autor tego wpisu zaproponowa\u0142 u\u017cycie lazy loadingu jako rozwi\u0105zanie problemu czasu \u0142adowania.<\/p>\n\n\n\n<p>Po implementacji pr\u0119dko\u015b\u0107 budowania oraz \u0142adowania aplikacji drastycznie spad\u0142a, co nie powinno nikogo dziwi\u0107, lecz znowu Vite okaza\u0142 si\u0119 by\u0107 szybszy od Webpacka.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Inne wskaz\u00f3wki<\/strong><\/h2>\n\n\n\n<p>Co jeszcze mo\u017ce wp\u0142ywa\u0107 mi\u0119dzy innymi na pr\u0119dko\u015b\u0107 startu serwera, \u0142adowania strony lub budowy aplikacji?<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Ostro\u017cne dobieranie plugin\u00f3w<\/strong><\/h3>\n\n\n\n<p>Vite umo\u017cliwia wykorzystanie w konfiguracji plugin\u00f3w dostarczonych przez spo\u0142eczno\u015b\u0107, kt\u00f3ra tworzy swoje w\u0142asne rozwi\u0105zania w miar\u0119 potrzeb. I o ile w wielu przypadkach mog\u0105 nam u\u0142atwi\u0107 prac\u0119, pozostaj\u0105 one poza kontrol\u0105 oficjalnych tw\u00f3rc\u00f3w technologii.<\/p>\n\n\n\n<p>Tw\u00f3rcy doradzaj\u0105, aby przy wyborze pluginu sugerowa\u0107 si\u0119 mi\u0119dzy innymi tym, aby:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>du\u017ce zale\u017cno\u015bci, kt\u00f3re s\u0105 rzadko u\u017cywane, powinny by\u0107 importowane dynamicznie, \u017ceby skr\u00f3ci\u0107 czas uruchamiania Node.js,<\/li>\n\n\n\n<li>unika\u0107 wykonywania d\u0142ugotrwa\u0142ych operacji w hookach buildStart, config i configResolved, poniewa\u017c op\u00f3\u017aniaj\u0105 one uruchomienie serwera deweloperskiego.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Unikaj barrel files<\/strong><\/h3>\n\n\n\n<p>Czym jest barrel files? Jest to spos\u00f3b na eksportowanie naszego kodu, kt\u00f3ry znajduje si\u0119 w katalogu, w pliku index.js. Przyk\u0142ad:<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/08\/image11-3.png\"><img decoding=\"async\" width=\"1024\" height=\"149\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/08\/image11-3-1024x149.png\" alt=\"\/\/index.ts\" class=\"wp-image-28774\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/08\/image11-3-1024x149.png 1024w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/08\/image11-3-300x44.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/08\/image11-3-768x112.png 768w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/08\/image11-3.png 1398w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p>Przy importowaniu metody helper1, pobieramy tak\u017ce dwie pozosta\u0142e metody, kt\u00f3re nie tylko zajmuj\u0105 miejsce w pami\u0119ci, ale te\u017c mog\u0105 zawiera\u0107 side efects. Podsumowuj\u0105c, pobieramy kod, kt\u00f3rego nie potrzebujemy, a mo\u017ce nam zmniejszy\u0107 performance.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Zarz\u0105dzanie stylami <\/strong><\/h3>\n\n\n\n<p>Kolejnym sposobem, jaki tw\u00f3rcy polecaj\u0105 w celu zwi\u0119kszenie wydajno\u015bci, jest korzystanie z natywnych rozwi\u0105za\u0144 przy stalowaniu i dodawaniu grafik. Zalecaj\u0105:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>u\u017cywanie CSS zamiast pr\u0119-procesor\u00f3w tam, gdzie jest to mo\u017cliwe; do zagnie\u017cd\u017cania przyda si\u0119 PostCss,<\/li>\n\n\n\n<li>nieimportowanie SVG jako komponent\u00f3w; zamiast tego korzystaj z nich jako string lub importuj poprzez URL,<\/li>\n\n\n\n<li>unikania konfigurowania Babel, kiedy u\u017cywasz pluginu vitejs\/plugin-react, kt\u00f3ry pomaga w pracy z React,<\/li>\n\n\n\n<li>wykorzystywanie parsera LightningCSS do stalowania.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Sprecyzuj rozszerzenie pliku, jaki chcesz importowa\u0107<\/strong><\/h3>\n\n\n\n<p>Z perspektywy wydajno\u015bci importowanie plik\u00f3w dla Vite r\u00f3wnie\u017c mo\u017ce by\u0107 bardzo istotne. Chodzi tutaj o rozszerzenie pliku, jakiego szukamy. Vite pozwala na importowanie plik\u00f3w bez podania ich rozszerzenia. W jaki spos\u00f3b si\u0119 to odbywa? Kiedy importujemy plik, np.: \u201eTest.tsx\u201d pod \u015bcie\u017ck\u0105 \u201e.\/components\/Test\u201d, Vite zaczyna szuka\u0107 wskazanego pliku w nast\u0119puj\u0105cej kolejno\u015bci.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Test<\/li>\n\n\n\n<li>Test.mjs<\/li>\n\n\n\n<li>Test.js<\/li>\n\n\n\n<li>Test.mts<\/li>\n\n\n\n<li>Test.ts<\/li>\n\n\n\n<li>Test.jsx<\/li>\n\n\n\n<li>Test.tsx<\/li>\n\n\n\n<li>Test.json<\/li>\n<\/ol>\n\n\n\n<p>Jak wida\u0107, je\u015bli chcieliby\u015bmy importowa\u0107 plik JSON, Vite musi przej\u015b\u0107 kilka krok\u00f3w sprawdzaj\u0105cych czy nasz plik w danym folderze si\u0119 znajduje. Zamiast tego, zaleca si\u0119 importowa\u0107\u00a0plik wraz z rozszerzeniem \u2013 w naszym przypadku b\u0119dzie to \u201e.\/components\/Test.tsx\u201d.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Podsumowanie<\/strong><\/h2>\n\n\n\n<p>Zd\u0105\u017cyli\u015bmy ju\u017c pozna\u0107 podstawowe zalety Vite. Naturalne pytanie, kt\u00f3re nasuwa si\u0119 ka\u017cdemu programi\u015bcie, brzmi: <strong>Czy Vite jest w stanie zast\u0105pi\u0107 Webpacka?<\/strong> Jak zawsze, najlepsz\u0105 odpowiedzi\u0105 b\u0119dzie: \u201eto zale\u017cy\u201d \ud83d\ude09<\/p>\n\n\n\n<p>Na pewno by\u0142oby kusz\u0105c\u0105 wizj\u0105, aby nowy projekt, kt\u00f3ry w\u0142a\u015bnie startujemy, postawi\u0107 za pomoc\u0105 Vite. Niestety, \u017cycie programisty to nie bajka i nie ka\u017cdy ma to szcz\u0119\u015bcie, \u017ce zaczyna projekt od zera. Bardzo cz\u0119sto musimy mierzy\u0107 si\u0119 z starszymi projektami, gdzie wiele paczek jest skonfigurowana pod stabilne, u\u017cywane od wielu lat narz\u0119dzie, jakim jest Webpack. &nbsp;Przepisywanie aplikacji pod Vite by\u0142o by zapewne bardzo problematyczne.<\/p>\n\n\n\n<p>Je\u015bli jednak jeste\u015b osob\u0105 pocz\u0105tkuj\u0105ca w \u015bwiecie IT lub startuje z nowy projekt, to Vite wydaje si\u0119 ciekawym narz\u0119dziem do przetestowania. Jest proste w konfiguracji, HMR to bajeczne rozwi\u0105zanie, kt\u00f3re przyspiesza prac\u0119, a start projektu wi\u0105\u017ce si\u0119 z kilkoma krokami, kt\u00f3re musimy wyklika\u0107 w konsoli i\u2026 voil\u00e0, mo\u017cemy przej\u015b\u0107 do developmentu.<\/p>\n\n\n\n<p>Warto obserwowa\u0107, co b\u0119dzie dzia\u0142o si\u0119 z t\u0105 technologi\u0105, poniewa\u017c potencja\u0142 ma ogromny, cho\u0107 uzale\u017cniony od liczby os\u00f3b, kt\u00f3re b\u0119d\u0105 z niej korzysta\u0107 oraz rozwija\u0107 Vite wraz z pluginami u\u0142atwiaj\u0105cymi prac\u0119. Gor\u0105co Was zach\u0119cam do zapoznania si\u0119 z t\u0105 technologi\u0105 \ud83d\ude0a<\/p>\n\n\n\n<p>***<\/p>\n\n\n\n<p>Je\u015bli interesuj\u0105 Ci\u0119 narz\u0119dzia wykorzystywane w IT, zajrzyj koniecznie r\u00f3wnie\u017c <a href=\"https:\/\/sii.pl\/blog\/all\/przeglad-narzedzi\/\" target=\"_blank\" aria-label=\"do innych artyku\u0142\u00f3w naszych ekspert\u00f3w (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\">do innych artyku\u0142\u00f3w naszych ekspert\u00f3w<\/a>. <\/p>\n\n\n<div class=\"kk-star-ratings kksr-auto kksr-align-left kksr-valign-bottom\"\n    data-payload='{&quot;align&quot;:&quot;left&quot;,&quot;id&quot;:&quot;28748&quot;,&quot;slug&quot;:&quot;default&quot;,&quot;valign&quot;:&quot;bottom&quot;,&quot;ignore&quot;:&quot;&quot;,&quot;reference&quot;:&quot;auto&quot;,&quot;class&quot;:&quot;&quot;,&quot;count&quot;:&quot;3&quot;,&quot;legendonly&quot;:&quot;&quot;,&quot;readonly&quot;:&quot;&quot;,&quot;score&quot;:&quot;5&quot;,&quot;starsonly&quot;:&quot;&quot;,&quot;best&quot;:&quot;5&quot;,&quot;gap&quot;:&quot;11&quot;,&quot;greet&quot;:&quot;&quot;,&quot;legend&quot;:&quot;5\\\/5 ( votes: 3)&quot;,&quot;size&quot;:&quot;18&quot;,&quot;title&quot;:&quot;Podstawy Vite \u2013 co warto wiedzie\u0107 o alternatywie dla Webpacka&quot;,&quot;width&quot;:&quot;139.5&quot;,&quot;_legend&quot;:&quot;{score}\\\/{best} ( {votes}: {count})&quot;,&quot;font_factor&quot;:&quot;1.25&quot;}'>\n            \n<div class=\"kksr-stars\">\n    \n<div class=\"kksr-stars-inactive\">\n            <div class=\"kksr-star\" data-star=\"1\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"2\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"3\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"4\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"5\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n    <\/div>\n    \n<div class=\"kksr-stars-active\" style=\"width: 139.5px;\">\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n    <\/div>\n<\/div>\n                \n\n<div class=\"kksr-legend\" style=\"font-size: 14.4px;\">\n            5\/5 ( votes: 3)    <\/div>\n    <\/div>\n","protected":false},"excerpt":{"rendered":"<p>W erze przed wprowadzeniem modu\u0142\u00f3w ES w przegl\u0105darkach programi\u015bci JavaScript nie mieli natywnej mo\u017cliwo\u015bci tworzenia kodu w spos\u00f3b modularny. Z &hellip; <a class=\"continued-btn\" href=\"https:\/\/sii.pl\/blog\/podstawy-vite-co-warto-wiedziec-o-alternatywie-dla-webpacka\/\">Continued<\/a><\/p>\n","protected":false},"author":486,"featured_media":28777,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_editorskit_title_hidden":false,"_editorskit_reading_time":0,"_editorskit_is_block_options_detached":false,"_editorskit_block_options_position":"{}","inline_featured_image":false,"footnotes":""},"categories":[1314],"tags":[2642,2427,1546,1512,202],"class_list":["post-28748","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-development-na-twardo","tag-vite","tag-digital","tag-przeglad-narzedzi","tag-poradnik","tag-javascript"],"acf":[],"aioseo_notices":[],"republish_history":[],"featured_media_url":"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/08\/Podstawy-Vite-\u2013-co-warto-wiedziec-o-alternatywie-dla-Webpacka.jpg","category_names":["Development na twardo"],"_links":{"self":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/28748"}],"collection":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/users\/486"}],"replies":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/comments?post=28748"}],"version-history":[{"count":2,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/28748\/revisions"}],"predecessor-version":[{"id":28788,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/28748\/revisions\/28788"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/media\/28777"}],"wp:attachment":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/media?parent=28748"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/categories?post=28748"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/tags?post=28748"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}