Лоиҳаи ҳақиқӣ: Vite, модулҳо ва мағозаи ниҳоӣ
Аз сайт — ба компютери худ
То ҳол React рост дар саҳифаи курс кор мекард: китобхона пайваст буд, ва JSX дар паси парда ба JavaScript табдил меёфт. Барномаҳои воқеиро дигар хел месозанд: лоиҳа — ин ҷузвдон бо файлҳо дар компютер аст, ки дар он ҳар компонент дар файли худ меистад, ва асбоби махсус — ҷамъоваранда (bundler) — онҳоро ба сайти тайёр ҷамъ мекунад. Дар ин мавзӯъ — ин чӣ гуна сохта шудааст ва лоиҳаи худро чӣ тавр оғоз кардан.
Node.js ва npm
Ҷамъоваранда ва асбобҳои дигари барномасоз бо JavaScript навишта шудаанд ва дар Node.js — JavaScript берун аз браузер кор мекунанд. Якҷоя бо Node.js npm насб мешавад — мудири бастаҳо: вай китобхонаҳоро (React, React Router ва ҳазорон дигар) аз каталоги умумии npmjs.com зеркашӣ мекунад.
Node.js-ро аз сайти nodejs.org (версияи LTS) насб кунед ва дар терминал санҷед:
node --version
npm --version
Сохтани лоиҳа бо Vite
Vite — ҷамъоварандаи зуд ва маъмултарин барои лоиҳаҳои React. Лоиҳаро бо як фармон созед:
npm create vite@latest my-shop -- --template react
cd my-shop
npm install
npm run dev
npm create vite@latest my-shop— ҷузвдониmy-shop-ро бо қолаби лоиҳа сохтан;npm install— ҳамаи китобхонаҳоеро, ки ба лоиҳа лозиманд, зеркашӣ кардан;npm run dev— сервери коркардро оғоз кардан. Вай суроғаро менависад, масаланhttp://localhost:5173— онро дар браузер кушоед.
Сервери коркард файлҳоро назорат мекунад: тағйиротро нигоҳ доштед — саҳифа худаш дар як ҳиссаи сония нав мешавад, ва ҳолати компонентҳо то имкон нигоҳ дошта мешавад.
Дар дохили лоиҳа чӣ ҳаст
my-shop/
├── index.html ← ягона саҳифаи HTML бо <div id="root">
├── package.json ← тасвири лоиҳа: вобастагиҳо ва фармонҳо
├── package-lock.json ← версияҳои дақиқи ҳамаи бастаҳои насбшуда
├── vite.config.js ← танзимоти ҷамъоваранда
├── node_modules/ ← китобхонаҳои зеркашишуда (таҳрир намекунанд ва дар git нигоҳ намедоранд)
├── public/ ← файлҳо «чӣ хеле ки ҳастанд»: нишона, расмҳо
└── src/
├── main.jsx ← нуқтаи вуруд: createRoot(...).render(<App />)
├── App.jsx ← компоненти решагӣ
├── App.css
└── index.css
package.json — шиносномаи лоиҳа:
{
"name": "my-shop",
"scripts": {
"dev": "vite",
"build": "vite build",
"preview": "vite preview"
},
"dependencies": {
"react": "^18.3.1",
"react-dom": "^18.3.1"
}
}
Китобхонаи навро бо фармони npm install ном илова мекунанд — вай ба node_modules зеркашӣ мешавад ва дар dependencies
сабт мешавад. Масалан, npm install react-router-dom.
Модулҳо: import ва export
Дар сайт тамоми код дар як файл буд. Дар лоиҳа ҳар файл — модул-и алоҳида бо доираи намоёнии худ аст: тағйирёбандаҳои як файл дар дигараш намоён нестанд, то онҳоро ошкоро содир (export) ва ворид (import) накунанд.
Содироти номдор — модул якчанд чизро аз рӯи ном медиҳад:
// src/utils/money.js
export function formatPrice(price) {
return price.toFixed(2) + " сомонӣ";
}
export const CURRENCY = "TJS";
// src/components/ProductCard.jsx
import { formatPrice, CURRENCY } from "../utils/money.js";
Содироти пешфарз — як чизи асосии модул. Компонентҳоро одатан ҳамин тавр содир мекунанд:
// src/components/ProductCard.jsx
import { formatPrice } from "../utils/money.js";
export default function ProductCard({ product }) {
return (
<div className="card">
<h3>{product.title}</h3>
<p>{formatPrice(product.price)}</p>
</div>
);
}
// src/App.jsx
import ProductCard from "./components/ProductCard.jsx"; // номро ҳангоми import интихоб мекунед
| Чӣ | Export | Import |
|---|---|---|
| Номдор | export function f() {} / export const x = 1 |
import { f, x } from "./file.js" |
| Пешфарз | export default function App() {} |
import App from "./App.jsx" |
| Ном иваз кардан | — | import { f as format } from "./file.js" |
| Аз китобхона | — | import { useState } from "react" |
| Услубҳо | — | import "./App.css" |
Роҳҳо: ./ — ҳамон ҷузвдон, ../ — як сатҳ болотар. Агар роҳ бе нуқта сар шавад ("react", "react-router-dom"), ин
баста аз node_modules аст.
Акнун фаҳмо аст, ки сатри const { useState } = React; дар ҳамаи мисолҳои курс аз куҷост: дар лоиҳа онро
import { useState } from "react"; иваз мекунад.
Лоиҳаро ба файлҳо чӣ тавр тақсим кардан
Ягона сохтори дуруст нест, вале барои оғоз чунин кифоя аст:
src/
├── main.jsx
├── App.jsx ← масирҳо
├── api/products.js ← функсияҳои дархост ба сервер
├── context/CartContext.jsx ← CartProvider ва хуки useCart
├── hooks/useFetch.js ← хукҳои худ
├── components/ ← қисмҳои такроран истифодашаванда: Header, ProductCard, Button
└── pages/ ← саҳифаҳо: HomePage, ProductPage, CartPage
Қоида: компоненте, ки аз ~100 сатр калонтар аст ё дар якчанд ҷой истифода мешавад, — сабаби ба файли худ баровардани он аст.
Услубҳо
Дар Vite файли CSS-ро танҳо ба компонент import мекунанд — ва услубҳо ба саҳифа меафтанд:
import "./ProductCard.css";
Барои он ки синфҳои компонентҳои гуногун бо ҳам бархӯрд накунанд, модулҳои CSS-ро истифода мебаранд: файли
ProductCard.module.css ва import styles from "./ProductCard.module.css" → className={styles.card}. Tailwind CSS
ҳам маъмул аст — синфҳои хурди тайёр рост дар нишонагузорӣ.
Ҷамъоварӣ ва нашр
npm run dev — барои коркард. Барои гузоштани сайт онро ҷамъ мекунанд:
npm run build
Vite JSX-ро ба JavaScript табдил медиҳад, ҳамаи модулҳоро ба якчанд файл мечаспонад, онҳоро фишурда мекунад ва натиҷаро ба
ҷузвдони dist/ мегузорад. Инҳо файлҳои оддии статикӣ — HTML, CSS ва JS мебошанд. Онҳоро ба ҳар хостинг гузоштан мумкин
аст, бисёрашон ройгонанд: Netlify, Vercel, Cloudflare Pages, GitHub Pages. Одатан пайваст кардани
репозиторий дар GitHub кифоя аст — хостинг баъд аз ҳар тағйир npm run build-ро худаш иҷро мекунад.
Танзим барои React Router аз мавзӯи гузаштаро фаромӯш накунед: хостинг бояд барои ҳар суроға index.html-ро диҳад.
Асбобҳои муфид
- React Developer Tools — васеъкунандаи браузер: дарахти компонентҳо, props ва ҳолати онҳо, Profiler.
- ESLint (дар қолаби Vite аллакай танзим шудааст) — хатоҳоро меёбад, аз ҷумла вайрон кардани қоидаҳои хукҳо ва вобастагиҳои фаромӯшшудаи эффектҳо.
- Git — таърихи тағйироти лоиҳа;
node_modulesваdist-ро ба он илова намекунанд (файли.gitignore). - TypeScript — қолаби
--template react-ts: навъҳо барои props ва ҳолат хатоҳоро ҳатто пеш аз иҷро медоранд. - Next.js — фреймворк бар React: масирҳо аз рӯи файлҳо, бор кардани маълумот дар сервер, SEO. Ин сайт бо он сохта шудааст.
Лоиҳаи ниҳоӣ
Вазифаи охирини мавзӯъ — мағозаи хурд аст, ки дар он қариб ҳама чиз аз курс вомехӯрад: компонентҳо ва props, рӯйхатҳо ва
key, ҳолат ва навсозиҳои тағйирнопазир, эффект бо бор кардани маълумот, масирҳо бо параметрҳо, ҳисобҳо ҳангоми кашидан.
Онро ҳал кунед, ва баъд кӯшиш кунед онро дар компютери худ дар лоиҳаи Vite такрор кунед, ба файлҳо тақсим карда:
pages/, components/, context/CartContext.jsx. Ин аввалин лоиҳаи ҳақиқии React-и шумо барои портфолио мешавад.
Хулоса
- Node.js + npm — муҳит ва мудири бастаҳо;
npm create vite@latest,npm install,npm run dev. package.json— вобастагиҳо ва фармонҳо; китобхонаҳо —npm install ном.- Ҳар файл — модул:
export/export defaultваimport. - Бастаҳоро аз рӯи ном (
"react"), файлҳои худро аз рӯи роҳ ("./App.jsx") import мекунанд. npm run build→ ҷузвдониdist/→ хостинги ройгон.