Vue.js: إعدادات Vite

آخر تحديث: 2026-08-26

Vite هي أداة بناء من الجيل التالي أطلقها فريق Vue 3، وتتميز ببدء تشغيل سريع أسرع بـ 30 ضعفًا من Webpack. وتتميز Vite 5/6 بتحسينات كبيرة في مجالات مثل TypeScript وSSR وتحسين عملية البناء، مما يجعلها الخيار القياسي لمشاريع Vue الحديثة.

سيوجهك هذا الدرس خلال عملية التهيئة الهندسية الكاملة لـ Vite 5/6: vite.config.ts، والأسماء المستعارة، ومتغيرات البيئة، وSCSS، والاستيراد التلقائي، وتحسين عملية البناء. وتعد هذه مهارات أساسية لمشاريع Vue على مستوى المؤسسات.

1. ما ستتعلمه



2. مقارنة بين «تجربة المهندس» خلال عملية التشغيل البارد التي تستغرق 5 دقائق

(1) المشكلة: يستغرق Webpack 30 ثانية لبدء التشغيل من الصفر، مما يجعل المطورين ينتظرون حتى يتعطل

استخدم فريق أليس Webpack:

BASH
# Webpack Project Cold Start
$ npm run dev
> Project is running at http://localhost:8080
> Compiled successfully in 28.5s ← Waited 30s

قائد الفريق تشارلي:

«أليس، يستغرق خادم التطوير لدينا 30 ثانية حتى يبدأ العمل. وفي كل مرة أحفظ فيها ملفًا، تستغرق عملية إعادة التحميل الفوري 3 ثوانٍ. علينا أن ننتقل إلى استخدام Vite.»

(2) حل Vite: تشغيل بارد في 5 ثوانٍ، واستعادة فورية (HMR) بمستوى الميلي ثانية

BASH
# Vite Project Cold Start
$ npm run dev
> VITE v5.4.0 ready in 487 ms ← Only 0.5s
> Local: http://localhost:5173/

مقارنة بين تجارب التنمية:

العملية Webpack 5 Vite 5
التشغيل البارد 28 ثانية 0.5 ثانية
عالية، متوسطة، منخفضة 1-3 ثوانٍ < 50 مللي ثانية
تنفيذ المشاريع الكبيرة 30–60 ثانية 5–15 ثانية

تشغيل أولي أسرع بـ 56 ضعفًا. تحسنت كفاءة التطوير بشكل ملحوظ منذ التحول إلى Vite.

(3) الإيرادات

بعد التبديل إلى Vite:



3. المفاهيم الأساسية لـ Vite 5/6

(1) Vite Dual Mode

TEXT 📖 للعرض فقط
Development Mode(dev):
 - Using native ESM,Directly in the browser import
 - Compile on Demand(Compiled only on the first visit to the page)
 - HMR Extremely fast(Update only the modules that have been modified)

Production Model(build):
 - Use Rollup Packaging
 - Automatic tree-shaking / Code Break / Compression
 - Output to dist/ Table of Contents

(2) 5 مزايا رئيسية

الميزة الوصف
تشغيل سريع للغاية عند بدء التشغيل البارد يقوم esbuild بتحضير التبعيات مسبقًا (مكتوب بلغة Go، وأسرع بـ 100 ضعف من Babel المكتوب بلغة JS)
التجميع حسب الطلب يقوم بتجميع الوحدات النمطية التي يتم الوصول إليها حاليًا فقط؛ ولا يقوم بتجميع المشروع بأكمله
ESM الأصلي يتم تحميله مباشرةً بواسطة المتصفح <script type="module">
HMR (فائق السرعة) تعديل ملف واحد؛ يتم تحديث هذه الوحدة فقط
SSR / SSG دعم من الدرجة الأولى (موصى به رسميًا من قِبل Nuxt 3)

(3) Vite 5/6 مقابل Vite 4

البعد Vite 4 Vite 5/6
سرعة بدء التشغيل سريع أسرع (تبعيات مسبقة الإنشاء مُحسَّنة)
وقت الإنشاء 5–15 ثانية 3–8 ثانية
متطلبات العقدة 14+ 18+
التجميع 3.x 4.x
ESM الافتراضي
التقييم قديم ⭐⭐⭐⭐⭐


4. إكمال التهيئة لملف vite.config.ts

(1) الهيكل الأساسي

TS
// vite.config.ts
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import path from 'path'

export default defineConfig({
 // Project Root Directory(Default process.cwd())
 root: '.',
 
 // Basic Public Paths
 base: '/',
 
 // Plugins
 plugins: [vue()],
 
 // Server Configuration
 server: {
 port: 5173,
 open: true, // Open the browser automatically
 host: '0.0.0.0' // Accessible on the local area network
 },
 
 // Build Configuration
 build: {
 outDir: 'dist',
 sourcemap: false,
 minify: 'esbuild'
 },
 
 // CSS Layout
 css: {
 preprocessorOptions: {
 scss: {
 additionalData: `@import "@/styles/variables.scss";`
 }
 }
 },
 
 // Path Aliases
 resolve: {
 alias: {
 '@': path.resolve(__dirname, 'src')
 }
 }
})

(2) 5 ميزات رئيسية

TS
export default defineConfig({
 // 1. Path Aliases(Most Commonly Used)
 resolve: {
 alias: {
 '@': path.resolve(__dirname, 'src'),
 '@components': path.resolve(__dirname, 'src/components'),
 '@stores': path.resolve(__dirname, 'src/stores')
 }
 },
 
 // 2. Server Configuration
 server: {
 port: 5173,
 open: true,
 host: '0.0.0.0',
 proxy: {
 '/api': {
 target: 'http://localhost:3000',
 changeOrigin: true
 }
 }
 },
 
 // 3. CSS Preprocessor
 css: {
 preprocessorOptions: {
 scss: { /* ... */ },
 less: { /* ... */ }
 }
 },
 
 // 4. Build Optimization
 build: {
 rollupOptions: {
 output: {
 manualChunks: {
 'vue-vendor': ['vue', 'vue-router', 'pinia']
 }
 }
 },
 chunkSizeWarningLimit: 1500
 },
 
 // 5. Optimization Options
 optimizeDeps: {
 include: ['vue', 'vue-router', 'pinia']
 }
})


5. 3 أنواع من متغيرات البيئة

(1) قواعد البادئة VITE_

BASH
# .env.development
VITE_API_BASE_URL=http://localhost:3000
VITE_APP_TITLE=My App (Dev)

# .env.production
VITE_API_BASE_URL=https://api.example.com
VITE_APP_TITLE=My App

# .env.local(git Ignore,Each developer's own)
VITE_API_KEY=secret-key

(2) تعريفات أنواع TypeScript

TS
// src/env.d.ts
/// <reference types="vite/client" />

interface ImportMetaEnv {
 readonly VITE_API_BASE_URL: string
 readonly VITE_APP_TITLE: string
 readonly VITE_API_KEY?: string
}

interface ImportMeta {
 readonly env: ImportMetaEnv
}

(3) الاستخدام في المكونات

TS
const apiUrl = import.meta.env.VITE_API_BASE_URL
const title = import.meta.env.VITE_APP_TITLE

(4) أولوية ملفات .env الأربعة

الملف الغرض Git
.env مشترك في جميع البيئات إرسال
.env.development للتطوير فقط إرسال
.env.production للإنتاج فقط إرسال
.env.local تجاوز محلي (لا يتم التثبيت) تجاهل


6. تكامل SCSS

(1) التثبيت

BASH
npm install -D sass

(2) المتغيرات العالمية

SCSS
// src/styles/variables.scss
$primary: #42b883;
$danger: #ef4444;
$font-size-base: 14px;
$border-radius: 4px;
TS
// vite.config.ts
css: {
 preprocessorOptions: {
 scss: {
 // Automatically import into each .scss Documents
 additionalData: `@import "@/styles/variables.scss";`
 }
 }
}
SCSS
// Any .scss You can use them directly in the document
.button {
 background: $primary; /* Not required @import */
 color: white;
 border-radius: $border-radius;
}

(3) 5 مزايا رئيسية لـ SCSS



7. unplugin-auto-import الاستيراد التلقائي

(1) التثبيت

BASH
npm install -D unplugin-auto-import

(2) التهيئة

TS
// vite.config.ts
import AutoImport from 'unplugin-auto-import'

export default defineConfig({
 plugins: [
 vue(),
 AutoImport({
 imports: ['vue', 'vue-router', 'pinia'],
 dts: 'src/auto-imports.d.ts', // Type Definitions
 eslintrc: {
 enabled: true // Generate .eslintrc-auto-import.json
 }
 })
 ]
})

(3) الاستخدام

VUE
<script setup>
// ✅ No longer needed import ref / computed / watch
const count = ref(0)
const double = computed(() => count.value * 2)
watch(count, (val) => console.log(val))

// ✅ No longer needed useRouter
const router = useRouter()
</script>

(4) 5 مزايا رئيسية

الميزة الوصف
استيراد أقل لا داعي لكتابة import ref / computed في كل مرة
أمان الأنواع الإنشاء التلقائي للأنواع في ملفات DTS
قابل للتكوين حدد واجهات برمجة التطبيقات (API) المراد استيرادها تلقائيًا
التوافق مع ESLint يقوم تلقائيًا بإنشاء ملف .eslintrc لتجنب تحذيرات الاستيراد
بناء سريع لا يؤثر على سرعة البناء


8. 5 تحسينات رئيسية في عملية التجميع

(1) تقسيم الكود إلى أجزاء (manualChunks)

TS
// vite.config.ts
build: {
 rollupOptions: {
 output: {
 manualChunks: {
 'vue-vendor': ['vue', 'vue-router', 'pinia'],
 'echarts-vendor': ['echarts', 'vue-echarts'],
 'utils': ['axios', 'dayjs']
 }
 }
 }
}

(2) عملية «ترجيد الشجرة» (ممكّنة افتراضيًا)

TS
build: {
 rollupOptions: {
 treeshake: {
 moduleSideEffects: 'no-external', // Mark all modules as side-effect-free
 propertyReadSideEffects: false // Reading tag attributes has no side effects
 }
 }
}

(3) تقليص حجم ملفات CSS

TS
build: {
 cssMinify: 'lightningcss', // 10x faster than esbuild
 // or 'esbuild' (Default)
}

(4) إدارة الموارد

TS
build: {
 assetsInlineLimit: 4096, // < 4KB Resources inline(base64)
 rollupOptions: {
 output: {
 assetFileNames: 'assets/[name]-[hash][extname]',
 chunkFileNames: 'js/[name]-[hash].js',
 entryFileNames: 'js/[name]-[hash].js'
 }
 }
}

(5) خريطة المصادر (تصحيح الأخطاء في بيئة الإنتاج)

TS
build: {
 sourcemap: true, // Generated in the production environment as well(Used for Sentry)
 rollupOptions: {
 output: {
 sourcemapExcludeSources: true // Not including the source code inline into map
 }
 }
}


9. أمثلة كاملة: 5 سيناريوهات رئيسية لتكوين Vite

▶ مثال: 1. أكمل ملف vite.config.ts

TS 📖 للعرض فقط
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import AutoImport from 'unplugin-auto-import'
import path from 'path'

export default defineConfig({
 plugins: [
 vue(),
 AutoImport({
 imports: ['vue', 'vue-router', 'pinia'],
 dts: 'src/auto-imports.d.ts'
 })
 ],
 
 resolve: {
 alias: {
 '@': path.resolve(__dirname, 'src')
 }
 },
 
 server: {
 port: 5173,
 open: true,
 proxy: {
 '/api': {
 target: 'http://localhost:3000',
 changeOrigin: true
 }
 }
 },
 
 css: {
 preprocessorOptions: {
 scss: {
 additionalData: `@import "@/styles/variables.scss";`
 }
 }
 },
 
 build: {
 outDir: 'dist',
 sourcemap: true,
 rollupOptions: {
 output: {
 manualChunks: {
 'vue-vendor': ['vue', 'vue-router', 'pinia']
 }
 }
 }
 }
})
46 سطر من الكود المنطقي (تجاوز الحد 40, للعرض فقط)

▶ مثال: 2. ثلاثة أنواع من إعدادات المتغيرات البيئية

BASH
# .env.development
VITE_API_BASE_URL=http://localhost:3000

# .env.production
VITE_API_BASE_URL=https://api.example.com

# .env.local
VITE_API_KEY=secret
TS
// src/env.d.ts
interface ImportMetaEnv {
 readonly VITE_API_BASE_URL: string
 readonly VITE_API_KEY?: string
}
interface ImportMeta {
 readonly env: ImportMetaEnv
}
TS
// Usage
const apiUrl = import.meta.env.VITE_API_BASE_URL

▶ مثال: 3. 5 تحسينات رئيسية في عملية البناء

التحسين التهيئة
مقتطفات الكود مقتطفات الدليل
تهز الشجرة إعدادات treeshake
تقليص حجم ملفات CSS cssMinify: 'lightningcss'
معالجة الموارد assetsInlineLimit + اسم الملف
خريطة المصدر sourcemap: true

▶ مثال: 4. مرجع سريع لـ 5 أخطاء شائعة

الخطأ الأعراض الحل
لا تعمل الأسماء المستعارة للمسارات فشل الاستيراد تستخدم وظيفة path.resolve المتغير __dirname
متغير SCSS غير مُعرَّف خطأ في التجميع الاستيراد التلقائي لـ additionalData
متغير بيئة غير محدد وقت تشغيل غير محدد استخدم البادئة "VITE_" + ملف .env
الاستيراد التلقائي لا يعمل لم يتم العثور على المرجع تحقق من إنشاء ملف DTS
شاشة فارغة في مرحلة الإنتاج خطأ في المسار تهيئة base: '/yourpath/'

▶ مثال: 5. مقارنات الأداء بين الإصدارات الخمسة الرئيسية من Vite

التكوين التشغيل البارد HMR إصدار الإنتاج
الافتراضي 0.5 ثانية 50 مللي ثانية 10 ثوانٍ
+ الاسم المستعار 0.5 ثانية 50 مللي ثانية 10 ثوانٍ
+ SCSS 0.6 ثانية 60 مللي ثانية 11 ثانية
+ الاستيراد التلقائي 0.6 ثانية 60 مللي ثانية 11 ثانية
+ manualChunks 0.6 ثانية 60 مللي ثانية 12 ثانية (لكن الشاشة الأولى أسرع بنسبة 50٪)


❓ أسئلة شائعة

س ما هو الإصدار الأدنى من Node المطلوب لتشغيل Vite 5/6؟
ج Node 18 أو أحدث (اعتبارًا من أكتوبر 2023). وقد انتهت مدة دعم Node 16. ولا يزال Vite 4 يدعم Node 14 أو أحدث.
س كيف يمكن استخدام __dirname من path.resolve في ESM؟
ج استخدم import.meta.url:fileURLToPath(new URL('./src', import.meta.url)). يوصي Vite 5 باستخدام resolve.alias بالاقتران مع path.resolve.
س هل البادئة "VITE_" مطلوبة لمتغيرات البيئة؟
ج نعم. بشكل افتراضي، لا يعرض Vite سوى المتغيرات التي تبدأ بالبادئة "VITE_" (لأسباب أمنية). أما المتغيرات الأخرى فلن يتم تضمينها في الحزمة.
س هل يمكن استخدام الاستيراد التلقائي في بيئة الإنتاج؟
ج نعم. يقوم unplugin-auto-import بإزالة كود الاستيراد التلقائي أثناء عملية البناء (واستبداله بعمليات استيراد صريحة)، وبالتالي لا يؤثر ذلك على عملية التجميع.
س أيهما يجب أن أختار، Vite أم Webpack؟
ج استخدم Vite لجميع المشاريع الجديدة. أما Webpack فيُستخدم فقط لصيانة المشاريع الحالية. Vite أسرع بـ 30 ضعفًا عند التشغيل لأول مرة، وأسرع بـ 60 ضعفًا عند استخدام ميزة HMR.
س كيف أقوم بتكوين Vite SSR؟
ج قم بدمجه باستخدام vite build --ssr أو Nuxt 3. يعد تكوين SSR معقدًا بعض الشيء (حيث يتطلب التعامل مع عملية الترطيب)، لكن Vite يوفر دعمًا رسميًا جيدًا.
س متى يتم إنشاء ملفات dts الخاصة بـ unplugin-auto-import؟
ج عند بدء تشغيل خادم التطوير وأثناء عملية البناء. يمكنك أيضًا تشغيل npx auto-imports يدويًّا لإنشائها.

📖 ملخص


📝 تمارين

  1. أسئلة أساسية (مستوى الصعوبة: ⭐)

    قم بإنشاء مشروع Vite + Vue 3 بالتهيئة التالية:

    • الاسم المستعار للمسار @ → src
    • المتغيرات العالمية في SCSS
    • ملف .env.development يحتوي على VITE_API_BASE_URL
  2. مسائل متقدمة (مستوى الصعوبة: ⭐⭐)

    الإعداد الكامل لـ Vite:

    • أسماء مستعارة للمسارات (@ / @components / @stores)
    • SCSS + الاستيراد التلقائي للمتغيرات
    • إلغاء الاستيراد التلقائي للمكونات الإضافية (Vue + Vue Router + Pinia)
    • وكيل /api للواجهة الخلفية
    • إصدار الإنتاج لـ manualChunks (vue-vendor)
  3. مسألة التحدي (مستوى الصعوبة: ⭐⭐⭐)

    تنفيذ «تكوين Vite على مستوى المؤسسات» كامل:

    1. 5 أسماء مستعارة رئيسية للمسارات (@ / @components / @stores / @utils / @composables)
    2. المتغيرات العالمية في SCSS + 5 مكسينات (flex / card / button / form / responsive)
    3. إلغاء الاستيراد التلقائي للمكونات الإضافية + إنشاء على غرار Volar
    4. 3 أنواع من متغيرات البيئة (التطوير / الاختبار / الإنتاج)
    5. 5 تحسينات عملية البناء (manualChunks / tree-shaking / lightningcss / / sourcemap)
    6. وكيل /api للواجهة الخلفية
    7. التكوين الكامل لـ TypeScript (env.d.ts + auto-imports.d.ts)
Web-Tutorial.com

فريق Web-Tutorial التقني

منصة دروس برمجية يديرها عدة مطورين. كل درس يتم كتابته ومراجعته بواسطة مطورين متخصصين في المجال. نعمل على ضمان دقة وموثوقية المحتوى — إذا لاحظت أي مشكلة، فيرجى إخبارنا.

100%