Loyiha yaratish — Vite + React, tuzilishi, package.json
Muammo: brauzer React ni tushunmaydi
Siz React yozmoqchisiz. Lekin bir muammo bor — brauzer React kodini to'g'ridan-to'g'ri o'qiy olmaydi.
Nima uchun? React da JSX degan narsa bor — HTML ga o'xshash sintaksis. Masalan:
const element = <h1>Salom</h1>;
Bu — oddiy JavaScript emas. Brauzer buni ko'rsa xato beradi, chunki <h1> ni o'zgaruvchiga tenglashtirish JavaScript da mavjud emas.
Bundan tashqari, React loyihasida onlab, yuzlab .js fayllar bo'ladi. Brauzerga ularni bittama-bitta yuklash ham samarasiz.
Demak, siz yozgan kod brauzerga yetib borishidan oldin ikki ish bajarilishi kerak:
- JSX → oddiy JavaScript ga aylantirilsin
- Ko'p fayl → bitta (yoki bir nechta) faylga yig'ilsin
Bu ishni build tool bajaradi.
Vite nima?
Vite — build tool. U sizning kodingizni brauzer tushunadigan holatga keltiradi.
Lekin Vite faqat shu emas. U shuningdek:
- Development server ishga tushiradi — siz kod yozasiz, brauzer darhol yangilanadi
- Hot Module Replacement (HMR) — sahifani to'liq qayta yuklamasdan, faqat o'zgargan qismni yangilaydi
- Production build — loyihani deploy qilish uchun optimallashtirilgan fayllar yaratadi
Ilgari nima ishlatilardi?
React chiqqanida Create React App (CRA) bor edi. Ko'p yillar davomida standart vosita edi. Lekin muammo bor edi — loyiha o'sganda development server ishga tushishi 30-60 soniya olardi. Har bir o'zgarishda ham sekin yangilanardi.
Vite boshqacha yondashuv ishlatadi. CRA barcha fayllarni oldin birlashtiradi, keyin serverga beradi. Vite esa serverga beradi, brauzer qaysi faylni so'rasa, o'shani o'sha zahoti o'zgartiradi. Shuning uchun loyiha qanchalik katta bo'lmasin — server 1-2 soniyada ishga tushadi.
Hozir CRA rasman eskirgan deb e'lon qilingan. Yangi loyihalarda Vite ishlatiladi.
Loyiha yaratish
Terminalda:
npm create vite@latest mening-loyiham -- --template react
Bu buyruq sizdan bir nechta savol so'rashi mumkin — framework va variant tanlash. React va JavaScript ni tanlang.
Keyin:
cd mening-loyiham
npm install
npm run dev
npm install — package.json da yozilgan barcha kutubxonalarni yuklab oladi. Bu bir marta bajariladi.
npm run dev — development server ishga tushadi. Terminalda shunday ko'rinadi:
VITE v6.0.5 ready in 312 ms
➜ Local: http://localhost:5173/
➜ Network: use --host to expose
Brauzerda http://localhost:5173 ni oching — React ilovasi ishlamoqda.
Papkalar tuzilishi
Loyiha yaratilgandan keyin quyidagi tuzilish hosil bo'ladi:
mening-loyiham/
├── public/
│ └── vite.svg
├── src/
│ ├── assets/
│ │ └── react.svg
│ ├── App.css
│ ├── App.jsx
│ ├── index.css
│ └── main.jsx
├── index.html
├── package.json
└── vite.config.js
Har bir narsa nima uchun kerak — birma-bir ko'ramiz.
index.html — hamma narsa shu yerdan boshlanadi
Brauzer birinchi navbatda shu faylni yuklaydi. Ichiga qarasangiz:
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Vite + React</title>
</head>
<body>
<div id="root"></div>
<script type="module" src="/src/main.jsx"></script>
</body>
</html>
<div id="root"> — bo'sh div. React butun ilovasini shu div ichiga joylaydi. Sahifada boshqa hech narsa yo'q — hamma narsa JavaScript orqali yaratiladi.
<script type="module" src="/src/main.jsx"> — Vite shu fayldan boshlab ishga tushadi.
src/main.jsx — React ni sahifaga ulash
import { StrictMode } from 'react'
import { createRoot } from 'react-dom/client'
import './index.css'
import App from './App.jsx'
createRoot(document.getElementById('root')).render(
<StrictMode>
<App />
</StrictMode>,
)
Bu fayl React ni #root elementiga "ulaydi". Vanilla JS da xuddi shu ish shunday bo'lardi:
const root = document.getElementById('root');
root.innerHTML = '<h1>Salom</h1>';
React da esa createRoot — React ning DOM ni o'z qo'liga olishi. Bundan keyin #root ichidagi hamma narsa React tomonidan boshqariladi. Siz endi document.getElementById yoki innerHTML ishlatmaysiz — React o'zi hal qiladi.
StrictMode haqida keyinroq alohida dars bo'ladi. Hozircha u development rejimida qo'shimcha tekshiruvlar qiladi, deb biling.
src/App.jsx — asosiy komponent
import { useState } from 'react'
import './App.css'
function App() {
const [count, setCount] = useState(0)
return (
<div>
<h1>Vite + React</h1>
<button onClick={() => setCount(count + 1)}>
Bosimlar soni: {count}
</button>
</div>
)
}
export default App
Bu — standart namuna. Keyingi darslarda buni o'chirib, o'zimiz yozamiz.
vite.config.js — Vite sozlamalari
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
export default defineConfig({
plugins: [react()],
})
Hozircha bu faylga tegmaysiz. Keyinchalik path alias (@/components/... kabi qisqa import yo'llari), proxy sozlamalari shu yerga qo'shiladi.
public/ papkasi — statik fayllar
Bu papkadagi fayllar Vite tomonidan o'zgartirilmaydi — to'g'ridan-to'g'ri brauzerga beriladi. Favicon, rasmlar, fontlar shu yerga qo'yiladi.
public/logo.png → brauzerda /logo.png manzilida mavjud bo'ladi.
package.json — loyiha haqida ma'lumot
{
"name": "mening-loyiham",
"private": true,
"version": "0.0.0",
"type": "module",
"scripts": {
"dev": "vite",
"build": "vite build",
"preview": "vite preview"
},
"dependencies": {
"react": "^19.0.0",
"react-dom": "^19.0.0"
},
"devDependencies": {
"@vitejs/plugin-react": "^4.3.4",
"vite": "^6.0.5"
}
}
dependencies va devDependencies farqi
dependencies — ilova ishlashi uchun kerak bo'lgan kutubxonalar. react va react-dom foydalanuvchi brauzerida ham ishlaydi, shuning uchun bu yerda.
devDependencies — faqat siz kod yozayotganda kerak. vite va eslint foydalanuvchi brauzerida ishlamaydi — ular faqat sizning kompyuteringizda, loyiha qurilayotganda kerak.
react va react-dom — nima uchun ikki alohida paket?
react — React ning o'zi: komponentlar, hooks, Virtual DOM mantiq. Bu qism platformadan mustaqil.
react-dom — React ni brauzer DOM ga ulash uchun. Agar React Native bilan mobil ilova yozsangiz, react-dom o'rniga react-native ishlatiladi. Ya'ni React ning o'zi bir xil — faqat "ulash" qismi o'zgaradi.
Skriptlar
| Buyruq | Nima qiladi |
|---|---|
npm run dev |
Development server ishga tushiradi |
npm run build |
dist/ papkasiga production fayllar yaratadi |
npm run preview |
dist/ ni local server da ko'rsatadi (deploy dan oldin tekshirish uchun) |
Toza loyiha — keraksizlarni o'chirish
Standart loyihada namuna kodlar bor. Ularni o'chirib, toza boshlaymiz.
src/App.jsx ni shunday qilib almashtiramiz:
function App() {
return (
<div>
<h1>Salom, React!</h1>
</div>
);
}
export default App;
src/App.css ni bo'shatamiz. src/assets/ papkasini o'chiramiz — hozircha kerak emas.
Saqlang — brauzer avtomatik yangilanadi va "Salom, React!" ko'rinadi. Sahifani qayta yuklamasdan yangilanishi — HMR ning ishi.
Tez-tez uchraydigan xatolar
npm run dev ishlamaydi:
Error: Cannot find module 'vite'
npm install ni ishga tushirmadingiz. node_modules/ papkasi yo'q. Har doim loyihani klonlagan yoki yaratgandan keyin npm install qilish kerak.
Port band:
Port 5173 is in use, trying another one...
Boshqa terminal da allaqachon npm run dev ishlamoqda. Bu xato emas — Vite avtomatik boshqa port tanlaydi (5174, 5175...).
Fayl nomi katta-kichik harf muammosi:
Failed to resolve import "./app" from "src/main.jsx"
App.jsx bor, lekin import App from './app' deb yozdingiz. Windows da ishlashi mumkin, lekin Linux serverda (production) xato beradi. Har doim fayl nomini to'g'ri yozing.
Xulosa
Vite — build tool va development server. U JSX ni oddiy JavaScript ga aylantiradi, fayllarni birlashtiradi, va kod o'zgarganda brauzerni avtomatik yangilaydi.
Loyiha tuzilishi:
index.html— kirish nuqtasi,#rootdiv borsrc/main.jsx— React ni#rootga ulaydisrc/App.jsx— asosiy komponent, shu yerdan boshlanadipublic/— statik fayllar (rasm, favicon)package.json— loyiha va kutubxonalar haqida ma'lumot
Keyingi dars
3-dars: JSX — nima, JavaScript dan farqi, qoidalar