Vite 6 + React + TypeScript: بناء تطبيق ويب حديث من الصفر في 2026

Vite 6 يعيد تعريف تطوير الواجهات الأمامية. مع Environment API الجديدة، و HMR أسرع من أي وقت مضى، ونظام إضافات ناضج، أصبح Vite 6 المعيار الفعلي لمشاريع React + TypeScript في 2026. في هذا الدليل، ستبني تطبيقاً كاملاً مع استكشاف كل ميزة رئيسية في Vite 6.
ما ستتعلمه
بنهاية هذا الدليل، ستعرف كيف:
- إنشاء وتهيئة مشروع Vite 6 + React + TypeScript من الصفر
- فهم واستخدام Environment API الجديدة في Vite 6
- تهيئة Hot Module Replacement (HMR) للتطوير فائق السرعة
- تحسين بناء الإنتاج مع tree-shaking وتقسيم الكود
- كتابة وتشغيل الاختبارات مع Vitest
- تهيئة متغيرات البيئة ووكلاء API
- إضافة CSS حديث مع CSS Modules و PostCSS
- نشر تطبيقك في بيئة الإنتاج
المتطلبات الأساسية
قبل البدء، تأكد من توفر:
- Node.js 20+ مثبت (أو Bun 1.1+)
- معرفة أساسية بـ React (المكونات، الخطافات، JSX)
- إلمام بـ TypeScript (الأنواع، الواجهات، الأنواع العامة)
- محرر أكواد — يُنصح بـ VS Code أو Cursor
- طرفية مع وصول إلى npm أو pnpm
لماذا Vite 6؟
منذ إصداره الأول في 2020، أحدث Vite ثورة في تطوير الواجهات الأمامية باستبدال أدوات التجميع الثقيلة مثل webpack بخادم تطوير يعتمد على وحدات ES الأصلية. يجلب Vite 6، الذي صدر في أواخر 2025، تحسينات جوهرية:
| الميزة | Vite 5 | Vite 6 |
|---|---|---|
| Environment API | غائبة | كاملة ومستقرة |
| خادم التطوير | سريع | أسرع |
| دعم Rolldown | تجريبي | مستقر |
| حل الوحدات | قياسي | محسّن |
| تهيئة TypeScript | جيدة | ممتازة مع الإكمال التلقائي |
الميزة الرئيسية في Vite 6 هي Environment API — تجريد يتيح لك إدارة بيئات تشغيل متعددة (العميل، SSR، العمال) في مشروع واحد بتهيئات مختلفة.
الخطوة 1: إنشاء المشروع
لنبدأ بإنشاء مشروع جديد باستخدام قالب React + TypeScript الرسمي:
npm create vite@latest my-vite-app -- --template react-ts
cd my-vite-app
npm installإذا كنت تفضل pnpm (يُنصح به للأداء):
pnpm create vite my-vite-app --template react-ts
cd my-vite-app
pnpm installهيكل المشروع
هذا هو الهيكل المُنشأ:
my-vite-app/
├── public/
│ └── vite.svg
├── src/
│ ├── assets/
│ │ └── react.svg
│ ├── App.css
│ ├── App.tsx
│ ├── index.css
│ ├── main.tsx
│ └── vite-env.d.ts
├── index.html
├── package.json
├── tsconfig.json
├── tsconfig.app.json
├── tsconfig.node.json
└── vite.config.ts
على عكس أدوات التجميع التقليدية، index.html موجود في جذر المشروع — يستخدمه Vite كنقطة دخول بدلاً من ملف JavaScript.
شغّل خادم التطوير:
npm run devافتح http://localhost:5173 — سترى تطبيق React الافتراضي مع تفعيل HMR. عدّل src/App.tsx وشاهد التغييرات تظهر فوراً في المتصفح.
الخطوة 2: فهم تهيئة Vite 6
افتح vite.config.ts — قلب التهيئة:
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
export default defineConfig({
plugins: [react()],
})التهيئة المتقدمة
لنعزز هذه التهيئة لمشروع إنتاجي:
import { defineConfig, loadEnv } from 'vite'
import react from '@vitejs/plugin-react'
import { resolve } from 'path'
export default defineConfig(({ mode }) => {
const env = loadEnv(mode, process.cwd(), '')
return {
plugins: [react()],
// أسماء مستعارة للمسارات لاستيراد أنظف
resolve: {
alias: {
'@': resolve(__dirname, './src'),
'@components': resolve(__dirname, './src/components'),
'@hooks': resolve(__dirname, './src/hooks'),
'@utils': resolve(__dirname, './src/utils'),
'@types': resolve(__dirname, './src/types'),
},
},
// تهيئة خادم التطوير
server: {
port: 3000,
open: true,
// وكيل لاستدعاءات API في التطوير
proxy: {
'/api': {
target: env.VITE_API_URL || 'http://localhost:8080',
changeOrigin: true,
rewrite: (path) => path.replace(/^\/api/, ''),
},
},
},
// تهيئة بناء الإنتاج
build: {
target: 'es2022',
sourcemap: true,
rollupOptions: {
output: {
manualChunks: {
vendor: ['react', 'react-dom'],
},
},
},
},
// تهيئة CSS
css: {
modules: {
localsConvention: 'camelCase',
},
},
}
})تهيئة الأسماء المستعارة في TypeScript
لكي يتعرف TypeScript على الأسماء المستعارة @، حدّث tsconfig.app.json:
{
"compilerOptions": {
"baseUrl": ".",
"paths": {
"@/*": ["./src/*"],
"@components/*": ["./src/components/*"],
"@hooks/*": ["./src/hooks/*"],
"@utils/*": ["./src/utils/*"],
"@types/*": ["./src/types/*"]
}
}
}الخطوة 3: Environment API في Vite 6
الميزة البارزة في Vite 6 هي Environment API. قبل Vite 6، كان خادم التطوير يعالج كل الكود في خط أنابيب واحد. الآن، كل بيئة (عميل، SSR، عامل) لها تهيئتها الخاصة ورسم وحداتها البياني.
لماذا هذا مهم
تخيل مشروعاً مع عرض من جانب الخادم (SSR). قبل Vite 6، كان نفس خط الأنابيب يحوّل كود العميل وكود الخادم، مما قد يسبب تعارضات. مع Environment API:
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
export default defineConfig({
plugins: [react()],
environments: {
// بيئة العميل (المتصفح)
client: {
build: {
outDir: 'dist/client',
rollupOptions: {
input: './index.html',
},
},
},
// بيئة SSR (Node.js)
ssr: {
build: {
outDir: 'dist/server',
ssr: true,
},
resolve: {
conditions: ['node'],
},
},
},
})الاستخدام في الإضافات
إذا كنت تطور إضافات Vite، تتيح لك Environment API استهداف بيئة محددة:
function myVitePlugin() {
return {
name: 'my-plugin',
// هذا الخطاف يعمل في كل بيئة
resolveId(source, importer, options) {
if (this.environment.name === 'ssr') {
// منطق خاص بـ SSR
return null
}
// المنطق الافتراضي (العميل)
return null
},
// تهيئة مختلفة حسب البيئة
configureServer(server) {
const clientEnv = server.environments.client
const ssrEnv = server.environments.ssr
// كل بيئة لها رسم وحدات بياني خاص
console.log('وحدات العميل:', clientEnv.moduleGraph.idToModuleMap.size)
},
}
}بالنسبة لمعظم مشاريع React الكلاسيكية (SPA بدون SSR)، تعمل Environment API تلقائياً مع بيئة client الافتراضية. تظهر فائدتها الرئيسية في أطر العمل الكاملة مثل Next.js و Remix و Astro التي تستخدم Vite داخلياً.
الخطوة 4: هيكلة مشروع React
لننشئ بنية مشروع قابلة للتوسع:
mkdir -p src/{components,hooks,utils,types,pages,styles,services}التخطيط الرئيسي
أنشئ src/components/Layout.tsx:
import { Outlet } from 'react-router-dom'
import { Header } from './Header'
import { Footer } from './Footer'
import styles from './Layout.module.css'
export function Layout() {
return (
<div className={styles.layout}>
<Header />
<main className={styles.main}>
<Outlet />
</main>
<Footer />
</div>
)
}CSS Modules مع Vite
أنشئ src/components/Layout.module.css — يدعم Vite CSS Modules أصلياً:
.layout {
min-height: 100vh;
display: flex;
flex-direction: column;
}
.main {
flex: 1;
max-width: 1200px;
margin: 0 auto;
padding: 2rem;
width: 100%;
}مكون Header
أنشئ src/components/Header.tsx:
import { Link, NavLink } from 'react-router-dom'
import styles from './Header.module.css'
const navLinks = [
{ to: '/', label: 'الرئيسية' },
{ to: '/about', label: 'حول' },
{ to: '/dashboard', label: 'لوحة التحكم' },
]
export function Header() {
return (
<header className={styles.header}>
<Link to="/" className={styles.logo}>
تطبيق Vite
</Link>
<nav className={styles.nav}>
{navLinks.map(({ to, label }) => (
<NavLink
key={to}
to={to}
className={({ isActive }) =>
isActive ? styles.active : styles.link
}
>
{label}
</NavLink>
))}
</nav>
</header>
)
}مكون Footer
أنشئ src/components/Footer.tsx:
import styles from './Footer.module.css'
export function Footer() {
return (
<footer className={styles.footer}>
<p>
بُني بـ Vite 6 + React + TypeScript —{' '}
{new Date().getFullYear()}
</p>
</footer>
)
}الخطوة 5: التوجيه مع React Router
ثبّت React Router:
npm install react-router-domأنشئ src/pages/Home.tsx:
import styles from './Home.module.css'
export function Home() {
return (
<div className={styles.home}>
<h1>مرحباً بك في تطبيق Vite 6</h1>
<p>
هذا التطبيق مبني بـ Vite 6 و React 19 و TypeScript
لأداء مثالي.
</p>
<div className={styles.features}>
<FeatureCard
title="HMR فائق السرعة"
description="التعديلات تنعكس فوراً في المتصفح"
/>
<FeatureCard
title="TypeScript أصلي"
description="دعم TypeScript كامل بدون تهيئة"
/>
<FeatureCard
title="بناء محسّن"
description="tree-shaking وتقسيم الكود تلقائياً"
/>
</div>
</div>
)
}
function FeatureCard({ title, description }: { title: string; description: string }) {
return (
<div className={styles.card}>
<h3>{title}</h3>
<p>{description}</p>
</div>
)
}حدّث src/main.tsx لتهيئة التوجيه:
import { StrictMode } from 'react'
import { createRoot } from 'react-dom/client'
import { createBrowserRouter, RouterProvider } from 'react-router-dom'
import { Layout } from '@/components/Layout'
import { Home } from '@/pages/Home'
import './index.css'
const router = createBrowserRouter([
{
element: <Layout />,
children: [
{ index: true, element: <Home /> },
{
path: 'about',
lazy: () => import('@/pages/About').then(m => ({ Component: m.About })),
},
{
path: 'dashboard',
lazy: () => import('@/pages/Dashboard').then(m => ({ Component: m.Dashboard })),
},
],
},
])
createRoot(document.getElementById('root')!).render(
<StrictMode>
<RouterProvider router={router} />
</StrictMode>,
)لاحظ استخدام lazy() لـ تقسيم الكود — سيتم تحميل صفحتي About و Dashboard عند الطلب، مما يقلل حجم الحزمة الأولية.
الخطوة 6: متغيرات البيئة
يدير Vite 6 متغيرات البيئة بملفات .env:
# .env — يُحمّل في جميع الأوضاع
VITE_APP_TITLE=My Vite App
VITE_API_URL=https://api.example.com
# .env.development — وضع التطوير فقط
VITE_API_URL=http://localhost:8080
VITE_DEBUG=true
# .env.production — وضع الإنتاج فقط
VITE_API_URL=https://api.production.comمهم: فقط المتغيرات التي تبدأ بـ VITE_ تُعرض لكود العميل. المتغيرات بدون هذه البادئة تبقى من جانب الخادم لحماية الأسرار.
تحديد أنواع متغيرات البيئة
أنشئ src/env.d.ts لتحديد الأنواع في TypeScript:
/// <reference types="vite/client" />
interface ImportMetaEnv {
readonly VITE_APP_TITLE: string
readonly VITE_API_URL: string
readonly VITE_DEBUG?: string
}
interface ImportMeta {
readonly env: ImportMetaEnv
}الاستخدام في الكود:
const apiUrl = import.meta.env.VITE_API_URL
const appTitle = import.meta.env.VITE_APP_TITLE
const isDev = import.meta.env.DEV // قيمة منطقية تلقائيةالخطوة 7: جلب البيانات مع خطاف مخصص
أنشئ خطافاً قابلاً لإعادة الاستخدام لاستدعاءات API. أنشئ src/hooks/useFetch.ts:
import { useState, useEffect } from 'react'
interface FetchState<T> {
data: T | null
loading: boolean
error: string | null
}
export function useFetch<T>(url: string): FetchState<T> {
const [state, setState] = useState<FetchState<T>>({
data: null,
loading: true,
error: null,
})
useEffect(() => {
const controller = new AbortController()
async function fetchData() {
try {
setState(prev => ({ ...prev, loading: true, error: null }))
const response = await fetch(url, { signal: controller.signal })
if (!response.ok) {
throw new Error(`HTTP error: ${response.status}`)
}
const data = await response.json()
setState({ data, loading: false, error: null })
} catch (err) {
if (err instanceof DOMException && err.name === 'AbortError') return
setState({
data: null,
loading: false,
error: err instanceof Error ? err.message : 'خطأ غير معروف',
})
}
}
fetchData()
return () => controller.abort()
}, [url])
return state
}صفحة لوحة التحكم مع بيانات ديناميكية
أنشئ src/pages/Dashboard.tsx:
import { useFetch } from '@/hooks/useFetch'
import styles from './Dashboard.module.css'
interface User {
id: number
name: string
email: string
}
export function Dashboard() {
const { data: users, loading, error } = useFetch<User[]>(
'https://jsonplaceholder.typicode.com/users'
)
if (loading) return <div className={styles.loading}>جارٍ التحميل...</div>
if (error) return <div className={styles.error}>خطأ: {error}</div>
return (
<div className={styles.dashboard}>
<h1>لوحة التحكم</h1>
<div className={styles.grid}>
{users?.map(user => (
<div key={user.id} className={styles.userCard}>
<h3>{user.name}</h3>
<p>{user.email}</p>
</div>
))}
</div>
</div>
)
}الخطوة 8: تحسين بناء الإنتاج
يستخدم Vite 6 Rollup (أو قريباً Rolldown) لبناء الإنتاج. لنهيّئ التحسينات:
تقسيم الكود المتقدم
// vite.config.ts
export default defineConfig({
build: {
target: 'es2022',
minify: 'esbuild',
sourcemap: true,
rollupOptions: {
output: {
manualChunks(id) {
// فصل تبعيات React في قطعة vendor
if (id.includes('node_modules/react')) {
return 'react-vendor'
}
// فصل React Router
if (id.includes('node_modules/react-router')) {
return 'router'
}
// تجميع التبعيات الأخرى
if (id.includes('node_modules')) {
return 'vendor'
}
},
},
},
// عتبة تحذير حجم القطع
chunkSizeWarningLimit: 500,
},
})تحليل حجم الحزمة
ثبّت إضافة التحليل:
npm install -D rollup-plugin-visualizerأضفها إلى تهيئتك:
import { visualizer } from 'rollup-plugin-visualizer'
export default defineConfig({
plugins: [
react(),
visualizer({
open: true,
gzipSize: true,
brotliSize: true,
}),
],
})شغّل البناء:
npm run buildسيُفتح تقرير تفاعلي في متصفحك، يعرض حجم كل وحدة وقطعة.
التحميل المسبق للأصول
يولّد Vite 6 تلقائياً وسوم <link rel="modulepreload"> للقطع الحرجة. يمكنك أيضاً تهيئة التحميل المسبق يدوياً:
export default defineConfig({
build: {
modulePreload: {
polyfill: true, // Polyfill للمتصفحات القديمة
},
},
})الخطوة 9: الاختبار مع Vitest
Vitest هو إطار الاختبار الطبيعي لـ Vite — يشارك نفس التهيئة ويقدم واجهة برمجة متوافقة مع Jest.
التثبيت
npm install -D vitest @testing-library/react @testing-library/jest-dom jsdomالتهيئة
أضف تهيئة Vitest في vite.config.ts:
/// <reference types="vitest/config" />
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
export default defineConfig({
plugins: [react()],
test: {
globals: true,
environment: 'jsdom',
setupFiles: './src/test/setup.ts',
include: ['src/**/*.{test,spec}.{ts,tsx}'],
coverage: {
provider: 'v8',
reporter: ['text', 'json', 'html'],
include: ['src/**/*.{ts,tsx}'],
exclude: ['src/**/*.test.{ts,tsx}', 'src/test/**'],
},
},
})أنشئ src/test/setup.ts:
import '@testing-library/jest-dom'كتابة اختبار
أنشئ src/hooks/useFetch.test.ts:
import { renderHook, waitFor } from '@testing-library/react'
import { describe, it, expect, vi, beforeEach } from 'vitest'
import { useFetch } from './useFetch'
describe('useFetch', () => {
beforeEach(() => {
vi.restoreAllMocks()
})
it('يجب أن يعيد البيانات بعد جلب ناجح', async () => {
const mockData = [{ id: 1, name: 'Test' }]
global.fetch = vi.fn().mockResolvedValue({
ok: true,
json: () => Promise.resolve(mockData),
})
const { result } = renderHook(() =>
useFetch('https://api.example.com/data')
)
expect(result.current.loading).toBe(true)
await waitFor(() => {
expect(result.current.loading).toBe(false)
expect(result.current.data).toEqual(mockData)
expect(result.current.error).toBeNull()
})
})
it('يجب أن يتعامل مع أخطاء HTTP', async () => {
global.fetch = vi.fn().mockResolvedValue({
ok: false,
status: 404,
})
const { result } = renderHook(() =>
useFetch('https://api.example.com/not-found')
)
await waitFor(() => {
expect(result.current.loading).toBe(false)
expect(result.current.error).toBe('HTTP error: 404')
expect(result.current.data).toBeNull()
})
})
})اختبار مكون
أنشئ src/components/Header.test.tsx:
import { render, screen } from '@testing-library/react'
import { MemoryRouter } from 'react-router-dom'
import { describe, it, expect } from 'vitest'
import { Header } from './Header'
describe('Header', () => {
it('يجب أن يعرض الشعار وروابط التنقل', () => {
render(
<MemoryRouter>
<Header />
</MemoryRouter>
)
expect(screen.getByText('تطبيق Vite')).toBeInTheDocument()
expect(screen.getByText('الرئيسية')).toBeInTheDocument()
expect(screen.getByText('حول')).toBeInTheDocument()
expect(screen.getByText('لوحة التحكم')).toBeInTheDocument()
})
})شغّل الاختبارات:
npx vitest # وضع المراقبة
npx vitest run # تشغيل واحد
npx vitest --coverage # مع التغطيةالخطوة 10: إضافات Vite الأساسية
SVG كمكونات React
npm install -D vite-plugin-svgrimport svgr from 'vite-plugin-svgr'
export default defineConfig({
plugins: [
react(),
svgr(),
],
})استخدم SVG كمكونات:
import { ReactComponent as Logo } from '@/assets/logo.svg'
function App() {
return <Logo className="logo" />
}إضافة الضغط
npm install -D vite-plugin-compressionimport compression from 'vite-plugin-compression'
export default defineConfig({
plugins: [
react(),
compression({
algorithm: 'brotliCompress',
ext: '.br',
}),
compression({
algorithm: 'gzip',
ext: '.gz',
}),
],
})إضافة PWA
npm install -D vite-plugin-pwaimport { VitePWA } from 'vite-plugin-pwa'
export default defineConfig({
plugins: [
react(),
VitePWA({
registerType: 'autoUpdate',
manifest: {
name: 'My Vite App',
short_name: 'MyApp',
theme_color: '#646cff',
},
}),
],
})الخطوة 11: النشر في الإنتاج
بناء الإنتاج
npm run buildيولّد Vite ملفات محسّنة في مجلد dist/:
dist/
├── assets/
│ ├── index-[hash].js # كود التطبيق
│ ├── react-vendor-[hash].js # قطعة React
│ ├── vendor-[hash].js # التبعيات الأخرى
│ └── index-[hash].css # الأنماط
├── index.html
└── vite.svg
معاينة البناء
npm run previewيشغّل خادماً محلياً يقدم ملفات الإنتاج — مثالي للتحقق من أن كل شيء يعمل قبل النشر.
النشر على Vercel
npm install -g vercel
vercelيكتشف Vercel تلقائياً Vite ويهيّئ البناء.
النشر على Cloudflare Pages
npm install -D wrangler
npx wrangler pages deploy distالنشر على VPS مع Nginx
أنشئ ملف nginx.conf:
server {
listen 80;
server_name myapp.com;
root /var/www/my-vite-app/dist;
index index.html;
# ضغط gzip
gzip on;
gzip_types text/css application/javascript application/json image/svg+xml;
# تخزين مؤقت للأصول الثابتة (ملفات مُجزّأة)
location /assets/ {
expires 1y;
add_header Cache-Control "public, immutable";
}
# رجوع SPA
location / {
try_files $uri $uri/ /index.html;
}
}يتيح التجزئة التلقائية لأسماء الملفات في Vite تخزيناً مؤقتاً قوياً — تتغير أسماء الملفات مع كل تعديل، فيحصل المستخدمون دائماً على أحدث إصدار.
استكشاف الأخطاء وإصلاحها
HMR لا يعمل
إذا لم تنعكس التغييرات تلقائياً:
- تحقق من أن ملفك يصدّر مكون React (يتطلب HMR في React تصدير المكونات)
- تحقق من وحدة تحكم المتصفح لأخطاء WebSocket
- جرّب إعادة تشغيل خادم التطوير:
npm run dev
خطأ "Failed to resolve import"
هذا يعني عادةً أن الاسم المستعار غير مهيّأ بشكل صحيح:
- تحقق من تعريف الاسم المستعار في كل من
vite.config.tsوtsconfig.app.json - أعد تشغيل خادم التطوير بعد تعديل التهيئة
- تحقق من وجود مسار الملف المستورد
البناء كبير جداً
- استخدم
rollup-plugin-visualizerلتحديد الوحدات الكبيرة - طبّق تقسيم الكود مع
React.lazy()أو التوجيه الكسول - تحقق من عمل tree-shaking — استخدم الاستيراد المسمى بدلاً من الاستيراد الافتراضي من المكتبات الكبيرة
الخطوات التالية
الآن بعد أن أتقنت Vite 6 مع React و TypeScript، إليك بعض المسارات لاستكشافها:
- إدارة الحالة — ادمج Zustand أو Jotai لإدارة الحالة
- مكونات UI — أضف shadcn/ui لمكتبة مكونات قابلة للوصول
- الخلفية — اربط تطبيقك بواجهة برمجة مع tRPC أو TanStack Query
- اختبارات E2E — هيّئ Playwright للاختبارات الشاملة
- CI/CD — أنشئ خط أنابيب GitHub Actions لأتمتة الاختبار والنشر
الخلاصة
يمثل Vite 6 محطة رئيسية في تطور أدوات الواجهات الأمامية في JavaScript. مع Environment API الجديدة، وأداء تطوير محسّن أكثر، ونظام إضافات غني، يوفر كل ما تحتاجه لبناء تطبيقات React + TypeScript حديثة وعالية الأداء.
النقاط الرئيسية:
- Vite 6 سريع — HMR فوري وبناء محسّن يسرّعان سير عملك
- Environment API تفتح إمكانيات جديدة لـ SSR وأطر العمل الكاملة
- Vitest يتكامل بشكل طبيعي ويقدم تجربة اختبار من الدرجة الأولى
- نظام الإضافات يغطي كل احتياج: PWA، SVG، الضغط، التحليل
سواء كنت تبدأ مشروعاً جديداً أو تنتقل من webpack أو Create React App، فإن Vite 6 هو الخيار الواضح لتطوير الواجهات الأمامية في 2026.
ناقش مشروعك معنا
نحن هنا للمساعدة في احتياجات تطوير الويب الخاصة بك. حدد موعدًا لمناقشة مشروعك وكيف يمكننا مساعدتك.
دعنا نجد أفضل الحلول لاحتياجاتك.
مقالات ذات صلة

دليل Bun 2.0 الشامل: بيئة تشغيل JavaScript الكل-في-واحد لعام 2026
أتقن Bun 2.0 من الصفر — بيئة تشغيل JavaScript فائقة السرعة التي تحل محل Node.js وnpm وwebpack وJest في ملف تنفيذي واحد. يغطي هذا الدليل التطبيقي بيئة التشغيل ومدير الحزم والمُجمّع ومُشغّل الاختبارات وبناء واجهة REST API للإنتاج.

بناء تطبيق full-stack مع TanStack Start: إطار عمل React من الجيل القادم
تعلّم كيفية بناء تطبيق full-stack كامل مع TanStack Start، إطار عمل React الوصفي المدعوم بـ TanStack Router وVite. يغطي هذا الدليل التوجيه المبني على الملفات، ودوال الخادم، والبرمجيات الوسيطة، والمصادقة، والنشر.

بناء تطبيقات تعاونية محلية أولاً باستخدام Yjs و React
تعلم كيفية بناء تطبيقات تعاونية تعمل في الوقت الفعلي حتى بدون اتصال بالإنترنت باستخدام تقنية CRDTs ومكتبة Yjs مع React. يغطي هذا الدليل مزامنة البيانات بدون تعارضات، والهندسة المعمارية المحلية أولاً، وبناء محرر مستندات مشترك من الصفر.