IlmHamroh
JavaScript Full-stack/16-qism. Frontend asboblari: npm, bundlerlar, config26/48-dars16 daqiqa
Mundarija (26)

Vite I: nega tez va loyiha yaratish — npm create vite, dev server, HMR va preview

Qisqacha: Vite — dev server va build vositasi. Dev rejimda u loyihani oldindan yig'maydi: brauzer qaysi modulni so'rasa, faqat o'shani o'sha zahoti o'giradi (brauzer ESM'ni o'zi tushunadi). Shuning uchun katta loyihada ham server ~0.2 soniyada ishga tushadi. node_modules dagi paketlarni esa bir marta oldindan yig'adi (pre-bundling) — yuzlab fayl o'rniga bitta so'rov. Fayl saqlanganda HMR faqat o'zgargan modulni almashtiradi. Yangi loyiha — npm create vite@latest, build natijasini tekshirish — vite preview. vazifalar ga bugun npm run dev va npm run preview qo'shiladi.

Bu darsda

  • npm create vite bilan loyiha yaratasiz va shablon ichidagi har faylni o'qiysiz.
  • Vite dev server nega tez ekanini o'lchovlar bilan tushuntirasiz.
  • Dependency pre-bundling nima ekanini va u bo'lmasa nima bo'lishini (654 ta so'rov) ko'rasiz.
  • HMR qachon modulni almashtiradi, qachon sahifani qayta yuklaydi — farqini bilasiz.
  • vite preview va dev server farqini bilib, vazifalar ga ikkala skriptni qo'shasiz.

Oldin bilishingiz kerak: Bundler nima, npx va npm create, Code splitting va hash bilan keshlash, Brauzerda ESM va import maps.

1. Nega bu kerak?

16-qismning bundler blokida (20–25) Vite'ni build vositasi sifatida ishlatdik: graf, chunk, tree shaking, source map, hash. Lekin Vite'ning nomi — fransuzcha "tez" — boshqa narsadan kelgan: dasturchi kod yozayotgandagi tezlik.

Vite'dan oldingi bundlerlar (webpack) dev rejimida ham butun loyihani yig'ardi. Katta loyihada npm start dan keyin bir daqiqa kutish oddiy hol edi. Faylni saqlagach ham — yana bir necha soniya. 2020-yilda Evan You (Vue muallifi) boshqa yo'l taklif qildi: brauzerlar endi ESM'ni o'zi tushunadi — dev'da yig'ish shart emas.

Asboblar zanjiri darsida dev server'ni oldindan ko'rgan edik. Ikki va'da ham bor: npm buyruqlari darsida "Vite'ni Vite I darsida o'rnatamiz", package.json I darsida esa "shablonni o'zimiz yaratamiz" degan edik. vazifalar ga Vite Bundler nima darsida o'rnatildi. Bugun — yangi loyiha yaratish va dev server.

Hayotiy o'xshatish: ikki oshxona. Birinchisi ertalab menyudagi hamma taomni tayyorlab qo'yadi — ochilishi kech, lekin buyurtma darhol beriladi (eski bundler). Ikkinchisi tayyor masalliqlar bilan ochiladi va har taomni buyurtma kelganda pishiradi — eshik darhol ochiladi (Vite dev). Restoranga (production) esa baribir hammasi oldindan tayyorlanadi — vite build.

Maslahat: Chiqishlar 2026-10-10 da Node 24.21.0, create-vite 9.2.1 va Vite 8.3.4 bilan olingan. Shablon ^8.3.0 yozadi, shu kuni eng yangisi — 8.3.4. Brauzer o'lchovlari — Chrome 154 (headless). vazifalar qadami — kanon chiqishlari (Vite 8.3.3). ready in vaqti va portlar sizda boshqacha bo'ladi.

2. npm create vite

2.1 Loyiha yaratish

npx va npm create darsidan bilasiz: npm create vite — create-vite paketini yuklab ishga tushiradi. Terminalda interaktiv savollar beradi (nom, framework, til). Hammasini bitta qatorda ham berish mumkin:

bash
npm create vite@9.2.1 bahor-menyu -- \
  --template vanilla-ts --no-interactive
text
> npx
> create-vite bahor-menyu --template vanilla-ts --no-interactive

│
◇  Scaffolding project in …\bahor-menyu...
│
└  Done. Now run:

  cd bahor-menyu
  npm install
  npm run dev

-- — "bundan keyingisi npm ga emas, create-vite ga" (scripts chuqur darsidagi argument uzatish). vanilla-ts — framework'siz TypeScript. Boshqa shablonlar (npx create-vite@9.2.1 --help ro'yxati): vanilla, vue-ts, react-ts, react-compiler-ts, preact-ts, lit-ts, svelte-ts, solid-ts, qwik-ts va ularning JavaScript variantlari.

2.2 Ichida nima bor

text
bahor-menyu/
├── .gitignore
├── index.html
├── package.json
├── tsconfig.json
├── public/
│   ├── favicon.svg
│   └── icons.svg
└── src/
    ├── main.ts
    ├── counter.ts
    ├── style.css
    └── assets/  hero.png, typescript.svg, vite.svg

package.json:

json
{
  "name": "bahor-menyu",
  "private": true,
  "version": "0.0.0",
  "type": "module",
  "scripts": {
    "dev": "vite",
    "build": "tsc && vite build",
    "preview": "vite preview"
  },
  "devDependencies": {
    "typescript": "~6.0.2",
    "vite": "^8.3.0"
  }
}

Tanish narsalar ko'p:

Maydon Qayerdan tanish
"private": true, "version": "0.0.0" package.json I: sayt nashr qilinmaydi
"type": "module" package.json I, Modul formatlari
"build": "tsc && vite build" vazifalar dagi bilan bir xil: avval tekshirish, keyin yig'ish
"vite": "^8.3.0" Semver: npm install 8.3.4 ni o'rnatdi
"typescript": "~6.0.2" TS 6 — shablon hali TS 7 ga o'tmagan

^8.3.0 ga e'tibor bering: npm install dan keyin npm ls — vite@8.3.4. 8.3.4 2026-10-08 da chiqqan. vazifalar da esa aniq "vite": "8.3.3" — loyihangiz qachon o'rnatilganiga qarab versiya "suzmaydi" (Lock-fayllar).

tsconfig.json — tsconfig darsidan tanish bayroqlar: "noEmit": true (tsc faqat tekshiradi), "moduleResolution": "bundler", "allowImportingTsExtensions": true, "verbatimModuleSyntax": true, "erasableSyntaxOnly": true — aynan vazifalar ga 15–16-qismda qo'yganlarimiz. "types": ["vite/client"] — Vite'ning qo'shimcha turlari (import.meta.env, rasm importlari) — Vite III darsida.

2.3 index.html — entry

html
<!doctype html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <link rel="icon" type="image/svg+xml" href="/favicon.svg" />
    <meta name="viewport"
      content="width=device-width, initial-scale=1.0" />
    <title>bahor-menyu</title>
  </head>
  <body>
    <div id="app"></div>
    <script type="module" src="/src/main.ts"></script>
  </body>
</html>

Vite'da index.html — kirish nuqtasi, va u loyiha ildizida turadi (public/ da emas). webpack'da entry JS fayl edi, HTML esa shablon sifatida keyin yasalardi. Vite'da teskari. HTML'dagi <script type="module" src="/src/main.ts"> — grafning boshlanishi (Bundler nima darsidagi graf). Esingizda bo'lsa, Skriptlarni ulash darsida "Vite HTML'ga type="module" li skriptni yozadi" degan edik — mana o'sha qator. .ts manzilni brauzer to'g'ridan-to'g'ri so'raydi — dev server uni JS qilib beradi.

2.4 React shabloni — kelajakka nazar

17-qismda react-ts shablonidan boshlaymiz. Uning package.json ida react, react-dom, @vitejs/plugin-react 6.1-bob, oxlint va "build": "tsc -b && vite build"; ildizida vite.config.ts, tsconfig.app.json, tsconfig.node.json, .oxlintrc.json. Yana bir yangilik: create-vite 9.2.1 React shablonlarida sukut bo'yicha ESLint o'rniga Oxlint (Biome va Oxlint darsida) qo'yadi — --eslint bayrog'i ESLint'ni qaytaradi. tsconfig ning app/node ga bo'linishini tsconfig: app/node darsida vazifalar ga ham qilamiz. Bugun bu fayllarni faqat taniymiz.

Tekshirib ko'ring: Nega Vite'da index.html public/ papkasida emas, ildizda?

Javob

Chunki u manba fayl — grafning boshi. Vite uni o'qiydi va <script>, <link> larni topadi. Build'da ularni hash'li nomlarga almashtirib qayta yozadi. public/ dagi fayllar esa grafga kirmaydi — o'zgarishsiz ko'chiriladi (Bundler nima darsidagi sw.js, manifest). index.html public/ da bo'lsa, Vite uni qayta yozmasdi va src/main.ts brauzerga xom holda borardi.

3. Nega tez

3.1 Bir zumda ishga tushish

bash
npm run dev
text
  VITE v8.3.4  ready in 187 ms

  ➜  Local:   http://localhost:5761/
  ➜  Network: use --host to expose

187 ms — va hali biror fayl o'girilmagan. Vite faqat serverni ochdi. Brauzer sahifani ochganda nima so'radi? Chrome 154 da sahifani ochib, so'rovlarni yozib oldik (puppeteer bilan; rasm va ikonlarni olib tashladik):

text
/  /@vite/client  /src/main.ts  /src/style.css  /src/counter.ts
/node_modules/vite/dist/client/env.mjs

Har modul — alohida so'rov, .ts nomi bilan. Brauzer main.ts ni oldi, ichidagi import './counter.ts' ni ko'rdi va uni so'radi — Vite har birini o'sha daqiqada o'girib berdi. Bu "on-demand" (talab bo'yicha) o'girish: 1000 ta modulli loyihada ham server faqat ochilgan sahifaga kerakli modullarni o'giradi.

sequenceDiagram
  participant B as Brauzer
  participant V as Vite dev
  B->>V: GET /src/main.ts
  V->>V: Oxc: faqat main.ts ni o'giradi
  V-->>B: JS (import "/src/counter.ts")
  B->>V: GET /src/counter.ts
  V-->>B: JS
  Note over V: boshqa fayllar —<br/>so'ralmaguncha tegilmaydi

Ikki sababi bor: brauzer ESM'ni o'zi tushunadi — modullarni bog'lash ishini brauzerga beramiz (Brauzerda ESM). Va Oxc tez — bitta faylni o'girish millisekundlar (Transpilyatsiya darsidagi o'lchov: 19 fayl ~3 ms).

/@vite/client — Vite'ning brauzerdagi qismi: u dev server bilan WebSocket orqali bog'lanadi va HMR'ni boshqaradi. Konsolda [vite] connecting... va [vite] connected. — uning xabarlari.

3.2 Dev va preview: so'rovlar soni

Xuddi shu sahifani build'dan keyin vite preview bilan ochdik:

Rejim Hamma so'rovlar Shundan JS
npm run dev 14 4 (@vite/client, main.ts, counter.ts, env.mjs)
npm run preview (dist/) 8 1 (index-wktXvZw9.js)

Dev'da ko'p so'rov — lokal kompyuterda bu sezilmaydi (tarmoq yo'q). Production'da esa har so'rov — kutish, shuning uchun u yerda bundle. Bitta vosita — ikki strategiya.

4. Dependency pre-bundling

4.1 Muammo: yuzlab fayl

Ilova kodi bilan hammasi yaxshi. node_modules dagi paketlar bilan esa ikki muammo bor: ba'zilari CommonJS (brauzer o'qimaydi — Modul formatlari), ba'zilari esa ESM, lekin yuzlab faylga bo'lingan. Masalan, lodash-es: har funksiya — alohida fayl.

main.ts ga bitta qator qo'shdik: import { sum } from "lodash-es";. Va ikki xil o'lchadik:

Dev server Sahifa so'rovlari
pre-bundling bilan (sukut) 15
optimizeDeps: { exclude: ["lodash-es"] } 654

exclude — "bu paketni oldindan yig'ma". Natija: brauzer lodash-es/lodash.js ni oldi, u 600 dan ortiq modulni import qiladi, ular yana boshqalarni... Sahifa ochilishi o'nlab soniyaga cho'zilishi mumkin.

4.2 Yechim: bir marta, oldindan

Sukut bo'yicha Vite birinchi ishga tushishda node_modules dan import qilingan paketlarni bitta faylga yig'adi. Dev server logida:

text
[vite] (client) [optimizer] bundling dependencies...

Natija node_modules/.vite/deps/ papkasida:

text
_metadata.json
lodash-es.js
lodash-es.js.map
package.json

Brauzer endi /node_modules/.vite/deps/lodash-es.js ni — bitta faylni — so'raydi. Pre-bundling ("oldindan yig'ish") ikki ish qiladi: CommonJS'ni ESM'ga o'giradi va ko'p faylni bittaga birlashtiradi. U faqat paketlar uchun — ular kam o'zgaradi, shuning uchun natija keshlanadi. _metadata.json dagi lockfileHash — lock-fayl o'zgarsa (yangi paket), Vite qayta yig'adi. Majburan qayta yig'ish — npx vite --force.

vazifalar da ham shunday: kanon dev sinovida web-vitals /node_modules/.vite/deps/web-vitals.js?v=9e4c595f dan keldi. ?v=… — kesh uchun versiya belgisi.

Tekshirib ko'ring: Nega Vite o'zingiz yozgan src/ kodini ham oldindan bitta faylga yig'maydi? Axir so'rovlar kamayardi.

Javob

Chunki src/ doim o'zgaradi. Har saqlashda bitta katta faylni qayta yig'ish — aynan eski bundlerlarning sekinligi. Alohida modullar bilan esa faqat o'zgargan fayl qayta o'giriladi va HMR faqat uni almashtiradi. Paketlar kam o'zgaradi — ularni bir marta yig'ib, keshlash foydali. Ikki xil narsaga — ikki xil strategiya.

5. HMR: issiq almashtirish

5.1 CSS — sahifa yangilanmaydi

HMR (Hot Module Replacement — modulni issiq almashtirish) — faylni saqlaganingizda o'zgargan modul sahifa qayta yuklanmasdan almashadi: forma ichidagi matn, ochiq modal, hisoblagich — joyida qoladi. Ochiq sahifada style.css ga h1 { color: #2e7d32; } qo'shdik:

text
20:48:06 [vite] (client) hmr update /src/style.css

Brauzer konsolida — [vite] hot updated: /src/style.css, sarlavha rangi — rgb(46, 125, 50). Sahifa qayta yuklanmadi.

5.2 TS modul — sahifa qayta yuklandi

Endi counter.ts dagi matnni o'zgartirdik (Count is → Hisob:):

text
20:48:07 [vite] (client) page reload src/counter.ts

Bu safar — page reload: butun sahifa qayta yuklandi va tugmada Hisob: 0. Nega? HMR modulni almashtirish uchun kimdir "men bu modulning yangi versiyasini qabul qilaman" deyishi kerak — bu HMR chegarasi (boundary). CSS uchun Vite buni o'zi biladi: eski <style> ni olib, yangisini qo'yadi. Oddiy TS modul uchun esa Vite bilmaydi: counter.ts tugmaga hodisa qo'shgan — eski hodisani kim olib tashlaydi? Xavfsiz yo'l — sahifani qayta yuklash.

Framework plaginlari bu chegarani o'zi qo'yadi. 17-qismda @vitejs/plugin-react bilan komponentni o'zgartirsangiz, sahifa yangilanmaydi va komponent holati saqlanadi (React Fast Refresh). Vanilla kodda chegarani qo'lda, import.meta.hot.accept() bilan yozish mumkin — bu kam kerak bo'ladigan ilg'or mavzu.

Nima o'zgardi Natija
CSS (<link> yoki import "./x.css") hmr update — joyida
framework komponenti (React, Vue) hmr update — holat saqlanadi
oddiy TS/JS modul page reload
vite.config.ts server qayta ishga tushadi

6. vite preview

vite preview — dist/ papkasini oddiy statik server bilan beradi. U build qilmaydi: avval npm run build kerak. Maqsadi — production natijasini lokal tekshirish: Asboblar zanjiri darsidagi "dist/index.html ni ikki marta bosib ochish — CORS xatosi" muammosining to'g'ri yechimi.

vite (dev) vite preview
Nimani beradi src/ — so'ralganda o'girib dist/ — tayyor fayllar
HMR bor yo'q
Source map doim (inline) build'dagidek
Sukut port 5173 4173
Qachon kod yozganda deploydan oldin tekshirish

Preview — production server emas: u sarlavhalarni (Cache-Control, gzip) haqiqiy hosting kabi bermaydi. Lekin "build'dan keyin sahifa ishlaydimi?" savoliga — eng tez javob. Bundler nima darsidagi blocking="render" yo'qolishi kabi xatolarni aynan shu bosqichda ushlaysiz.

7. Ko'p uchraydigan xatolar

Belgi Sabab Davosi
Port 5173 is in use boshqa Vite ochiq Vite keyingi portni oladi; qat'iy port — --strictPort
dev'da ishlaydi, build'da yo'q dev o'giradi, lekin tekshirmaydi; build boshqa yo'l npm run build && npm run preview
preview — eski sahifa build qilinmagan avval npm run build
yangi paket qo'shildi, dev'da g'alati xato pre-bundling keshi eski npx vite --force
telefondan ochilmaydi server faqat localhost da npx vite --host (faqat ishonchli tarmoqda)

Oxirgisi haqida: Network: use --host to expose — "tarmoqqa ochish uchun --host". Telefondagi brauzerda sinash uchun qulay, lekin dev server xavfsizlik uchun qurilmagan — jamoat Wi-Fi'da ochmang.

8. Mashqlar

Mashqlar kurs/mashqlar/16/26-vite/ da.

1-mashq (oson): Shablonni o'qing

npm create vite@latest bilan vanilla-ts loyiha yarating va javob bering:

  • Entry qaysi fayl:
  • npm run build qaysi ikki buyruqni bajaradi: tsc va
  • npm install dan keyin npm ls vite qaysi versiyani ko'rsatdi va nega package.json dagidan farq qiladi?
Yechim

index.html — ildizda, ichida <script type="module" src="/src/main.ts">. build — tsc && vite build. Bizda package.json da ^8.3.0, o'rnatilgani — 8.3.4 (2026-10-10 holatiga): ^ chegarasi 8.x ichida eng yangisini oladi. Siz o'qiyotgan kuni yanada yangirog'i bo'lishi mumkin. Aniq versiya kerak bo'lsa — npm i -D -E vite@8.3.4.

2-mashq (o'rta): HMR va reload

npm run dev ni oching, brauzerda DevTools → Console. Ketma-ket o'zgartiring va har biridan keyin konsol va terminalni yozing:

  1. src/style.css — h1 rangi.
  2. src/counter.ts — tugma matni.
  3. Tugmani 5 marta bosing, keyin yana style.css ni o'zgartiring. Hisoblagich nechada qoldi?
Yechim
  1. Terminal: [vite] (client) hmr update /src/style.css, konsol: [vite] hot updated: /src/style.css. Sahifa yangilanmadi.
  2. Terminal: [vite] (client) page reload src/counter.ts. Sahifa to'liq yangilandi, hisoblagich 0 dan.
  3. 5 da qoldi: CSS HMR sahifani qayta yuklamaydi, JavaScript holati saqlanadi. Shu tajribada counter.ts ni o'zgartirsangiz — hisoblagich yana 0 bo'ladi.

3-mashq (qiyin): 40 qatorlik "mini Vite"

Vite'ning asosiy g'oyasini o'zingiz yozing: mini-dev.mjs — node:http server, .ts fayl so'ralganda uni o'sha paytda oxc-transform (0.153.0) bilan JavaScript'ga o'girib, text/javascript sarlavhasi bilan beradi. Qolgan fayllar — o'zgarishsiz. sayt/ papkasida index.html, src/main.ts, src/price.ts — brauzerda «Osh: 35000 so'm» chiqsin.

Ishoralar: startDevServer(root, port) funksiyasi serverni qaytarsin — testda port = 0 (bo'sh port) beriladi va server.address().port dan o'qiladi. transformSync(fayl, kod).code — Transpilyatsiya darsidan. .ts import yo'li bilan yozilishi kerak ("./price.ts") — brauzer aynan shu manzilni so'raydi. Testda fetch bilan (Fetch API) .ts faylni so'rab, sarlavha va turlar o'chganini tekshiring.

Yechim
js
// mini-dev.mjs — Vite g'oyasi: faylni SO'RALGANDA o'giramiz
import { createServer } from "node:http";
import { readFile } from "node:fs/promises";
import { extname, join } from "node:path";
import { transformSync } from "oxc-transform";

const TYPES = {
  ".html": "text/html; charset=utf-8",
  ".js": "text/javascript; charset=utf-8",
  ".css": "text/css; charset=utf-8",
};

export function startDevServer(root, port = 0) {
  const server = createServer(async (req, res) => {
    const path = new URL(req.url, "http://x").pathname;
    const file = join(root, path === "/" ? "index.html" : path);
    try {
      let body = await readFile(file, "utf8");
      let type = TYPES[extname(file)] ?? "text/plain";
      if (extname(file) === ".ts") {
        // Faqat shu fayl, shu daqiqada — butun loyiha emas
        body = transformSync(file, body).code;
        type = TYPES[".js"];
      }
      res.writeHead(200, { "Content-Type": type });
      res.end(body);
    } catch {
      res.writeHead(404).end();
    }
  });
  return new Promise((resolve) => {
    server.listen(port, () => resolve(server));
  });
}

// node mini-dev.mjs sayt
if (import.meta.main) {
  const server = await startDevServer(process.argv[2] ?? ".", 5790);
  console.log(`http://localhost:${server.address().port}/`);
}

Testlar (.ts → text/javascript, turlar yo'q; yo'q fayl — 404): ℹ tests 2, ℹ pass 2. Chrome 154 da sahifa so'rovlari:

text
200 / text/html; charset=utf-8
200 /src/main.ts text/javascript; charset=utf-8
200 /src/price.ts text/javascript; charset=utf-8

Va #narx da — Osh: 35000 so'm. Bu — Vite'ning yuragi. Unga yetishmaydiganlar: yalang import ("lodash-es") va pre-bundling, CSS/rasm importi, HMR, kesh, xavfsizlik.

Xavfsizlik haqida: bu server /../../ kabi yo'l bilan papkadan tashqaridagi fayllarni ham berishi mumkin (join uni "to'g'rilab" yuboradi). Faqat lokal sinov uchun! Vite'da buning uchun server.fs cheklovlari bor — loyiha papkasidan tashqari fayllar sukut bo'yicha berilmaydi.

4-mashq: Vazifalar qadami — dev va preview

  • Branch: chore/dev-server
  • Commit: chore: npm run dev va npm run preview

package.json dagi scripts ga ikki qator qo'shing. So'ng npm run dev ni oching: ro'yxat chizilyaptimi, konsolda CSP xatosi bormi, CSS o'zgarganda nima bo'ladi? Keyin npm run build && npm run preview.

Yechim
json
{
  "scripts": {
    "postbuild": "node skriptlar/qobiq.js",
    "dev": "vite",
    "preview": "vite preview"
  }
}

(Qolgan skriptlar o'zgarmagan.) Kanon sinovi — npm run dev (Vite 8.3.3):

text
  VITE v8.3.3  ready in 337 ms

  ➜  Local:   http://localhost:5613/
  ➜  Network: use --host to expose

Sahifada ro'yxat 3 qator, CSP buzilishi 0: @vite/client va hamma modul o'z domenimizdan ('self') keladi. So'rovlar ichida:

text
  200 /@vite/client
  200 /assets/css/vazifalar.css
  200 /node_modules/.vite/deps/web-vitals.js?v=9e4c595f

web-vitals — pre-bundling'dan. /assets/js/tema.js — 200: fayl aslida tema.ts, Vite .js so'rovini .ts ga o'zi moslab berdi. CSS o'zgartirilganda — [vite] (client) hmr update /assets/css/vazifalar.css, konsolda [vite] css hot updated: /assets/css/vazifalar.css, sahifa qayta yuklanmadi.

npm run preview — dist/ dan: 200 /assets/index-Dvsf2Sj6.js, 200 /assets/olchov-G4bloHwN.js, konsol toza. Bu — 13–15-qismning 159 ta brauzer tekshiruvi ishlaydigan muhitga eng yaqin lokal sinov.

Testlar: 145/145. Brauzer: 159/159. Diff: 1 fayl, +3 −1.

bash
git switch -c chore/dev-server
npm pkg set scripts.dev="vite" scripts.preview="vite preview"
npm run build && npm test
git add package.json
git commit -m "chore: npm run dev va npm run preview"
git push -u origin chore/dev-server
gh pr create --fill
gh pr merge --merge

npm pkg set — package.json ni qo'lda ochmasdan o'zgartiradi (npm buyruqlari darsidan). Commit sarlavhasi — 37 belgi.

9. Real ishda

  • Vite — 2026-yilda frontend loyihalarning eng keng tarqalgan vositasi: React (17-qism), Vue, Svelte shablonlari, Vitest (testlash, 22-qism), Storybook — hammasi Vite ustida. Next.js o'z vositasi (Turbopack) bilan ishlaydi — Bundlerlar landshafti darsida solishtiramiz.
  • Ishdagi birinchi kun: npm ci, npm run dev — va vite.config.ts ni o'qish (Vite II darsida).
  • Intervyu savollari: "Vite nega webpack'dan tez?", "Dependency pre-bundling nima?", "HMR qanday ishlaydi?", "vite preview production server bo'la oladimi?".

Xulosa

  • npm create vite@latest <nom> -- --template <shablon> — loyiha; index.html — ildizdagi entry; skriptlar: dev, build (tsc && vite build), preview.
  • Dev'da Vite yig'maydi: brauzer so'ragan modulni o'sha paytda Oxc bilan o'giradi — server ~0.2 s da ishga tushadi.
  • Pre-bundling node_modules paketlarini bir marta yig'adi (node_modules/.vite/deps/): lodash-es bilan 654 o'rniga 15 so'rov; qayta yig'ish — --force.
  • HMR: CSS va framework komponentlari — joyida almashadi; oddiy TS modul — page reload.
  • vite preview — dist/ ni beradi, build qilmaydi; production server emas, lekin build'ni tekshirishning eng tez yo'li.

Keyingi dars: Vite II: vite.config ni o'qish va yozish — vazifalar ning vite.config.ts ini kalitma-kalit o'qiymiz va defineConfig, root, base, server, build bo'limlarini o'rganamiz.

Manbalar

  • Vite: "Getting Started" (npm create vite, shablonlar), "Why Vite", "Dependency Pre-Bundling", "HMR API", "Features" — vite.dev/guide
  • Vite: "Server Options" (server.port, --host, server.fs), "Preview Options" — vite.dev/config
  • create-vite — github.com/vitejs/vite/tree/main/packages/create-vite
  • Evan You, "Vite" e'loni (2020) — github.com/vitejs/vite (README tarixi)
Ulashish:Telegram'da

Izohlar (0)

Izoh yozish uchun kiring.

  • Hozircha izoh yo'q. Birinchi bo'ling!
Vite I: nega tez va loyiha yaratish — npm create vite, dev server, HMR va preview — IlmHamroh