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. ما ستتعلمه
- vite.config.ts: التكوين الكامل (الاسم المستعار / server / build / css / plugins)
- 3 متغيرات بيئة (تبدأ بـ VITE_)
- تكامل مع أدوات المعالجة المسبقة SCSS / Less
- unplugin-auto-import: الاستيراد التلقائي للقيم المرجعية / المحسوبة
- path.resolve اسم مستعار للمسار
- 5 تقنيات رئيسية لتحسين عملية البناء (التقسيم إلى أجزاء، إزالة العناصر غير الضرورية، تقليص الحجم، شبكة توزيع المحتوى (CDN)، خرائط المصدر)
- الاختلافات الرئيسية بين Vite 5/6 و Vite 4
2. مقارنة بين «تجربة المهندس» خلال عملية التشغيل البارد التي تستغرق 5 دقائق
(1) المشكلة: يستغرق Webpack 30 ثانية لبدء التشغيل من الصفر، مما يجعل المطورين ينتظرون حتى يتعطل
استخدم فريق أليس Webpack:
# 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) بمستوى الميلي ثانية
# 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:
- التشغيل البارد: 28 ثانية → 0.5 ثانية (-98%)
- HMR: 3 ثوانٍ → 50 مللي ثانية (-98%)
- التركيب: 30 ثانية → 10 ثوانٍ (-67%)
- رضا المطورين: تحسن ملحوظ
3. المفاهيم الأساسية لـ Vite 5/6
(1) Vite Dual Mode
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) الهيكل الأساسي
// 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 ميزات رئيسية
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_
# .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
// 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) الاستخدام في المكونات
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) التثبيت
npm install -D sass
(2) المتغيرات العالمية
// src/styles/variables.scss
$primary: #42b883;
$danger: #ef4444;
$font-size-base: 14px;
$border-radius: 4px;
// vite.config.ts
css: {
preprocessorOptions: {
scss: {
// Automatically import into each .scss Documents
additionalData: `@import "@/styles/variables.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
- المتغيرات: $primary، $danger
- التداخل: محددات «الأصل-الفرع»
- mixin: إعادة استخدام كتل الأنماط
- الدوال: lighten($primary, 10%)
- النمطية: @use / @forward
7. unplugin-auto-import الاستيراد التلقائي
(1) التثبيت
npm install -D unplugin-auto-import
(2) التهيئة
// 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) الاستخدام
<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)
// vite.config.ts
build: {
rollupOptions: {
output: {
manualChunks: {
'vue-vendor': ['vue', 'vue-router', 'pinia'],
'echarts-vendor': ['echarts', 'vue-echarts'],
'utils': ['axios', 'dayjs']
}
}
}
}
(2) عملية «ترجيد الشجرة» (ممكّنة افتراضيًا)
build: {
rollupOptions: {
treeshake: {
moduleSideEffects: 'no-external', // Mark all modules as side-effect-free
propertyReadSideEffects: false // Reading tag attributes has no side effects
}
}
}
(3) تقليص حجم ملفات CSS
build: {
cssMinify: 'lightningcss', // 10x faster than esbuild
// or 'esbuild' (Default)
}
(4) إدارة الموارد
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) خريطة المصادر (تصحيح الأخطاء في بيئة الإنتاج)
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
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']
}
}
}
}
})
▶ مثال: 2. ثلاثة أنواع من إعدادات المتغيرات البيئية
# .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
// src/env.d.ts
interface ImportMetaEnv {
readonly VITE_API_BASE_URL: string
readonly VITE_API_KEY?: string
}
interface ImportMeta {
readonly env: ImportMetaEnv
}
// 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٪) |
❓ أسئلة شائعة
__dirname من path.resolve في ESM؟import.meta.url:fileURLToPath(new URL('./src', import.meta.url)). يوصي Vite 5 باستخدام resolve.alias بالاقتران مع path.resolve.unplugin-auto-import بإزالة كود الاستيراد التلقائي أثناء عملية البناء (واستبداله بعمليات استيراد صريحة)، وبالتالي لا يؤثر ذلك على عملية التجميع.vite build --ssr أو Nuxt 3. يعد تكوين SSR معقدًا بعض الشيء (حيث يتطلب التعامل مع عملية الترطيب)، لكن Vite يوفر دعمًا رسميًا جيدًا.unplugin-auto-import؟npx auto-imports يدويًّا لإنشائها.📖 ملخص
- Vite 5/6: 0.5 ثانية للبدء من status التوقف التام، و50 مللي ثانية لـ HMR (مقارنةً بـ Webpack: 28 ثانية/3 ثوانٍ)
- ملف vite.config.ts يتضمن 5 أقسام أساسية: plugins / server / build / css / resolve.alias
- 3 أنواع من متغيرات البيئة: البادئة VITE_ + 4 ملفات .env
- الاستيراد التلقائي لملفات SCSS:
additionalData+ variables.scss - unplugin-auto-import: مرجع / computed / useRouter — لا حاجة إلى الاستيرادات بعد الآن
- 5 تحسينات رئيسية في عملية البناء: تقسيم الكود / تقليص الشجرة / تقليص حجم ملفات CSS / معالجة الموارد / خرائط المصدر
- Vite هي أداة البناء الموصى بها رسميًا لـ Vue 3
📝 تمارين
-
أسئلة أساسية (مستوى الصعوبة: ⭐)
قم بإنشاء مشروع Vite + Vue 3 بالتهيئة التالية:
- الاسم المستعار للمسار @ → src
- المتغيرات العالمية في SCSS
- ملف .env.development يحتوي على VITE_API_BASE_URL
-
مسائل متقدمة (مستوى الصعوبة: ⭐⭐)
الإعداد الكامل لـ Vite:
- أسماء مستعارة للمسارات (@ / @components / @stores)
- SCSS + الاستيراد التلقائي للمتغيرات
- إلغاء الاستيراد التلقائي للمكونات الإضافية (Vue + Vue Router + Pinia)
- وكيل /api للواجهة الخلفية
- إصدار الإنتاج لـ manualChunks (vue-vendor)
-
مسألة التحدي (مستوى الصعوبة: ⭐⭐⭐)
تنفيذ «تكوين Vite على مستوى المؤسسات» كامل:
- 5 أسماء مستعارة رئيسية للمسارات (@ / @components / @stores / @utils / @composables)
- المتغيرات العالمية في SCSS + 5 مكسينات (flex / card / button / form / responsive)
- إلغاء الاستيراد التلقائي للمكونات الإضافية + إنشاء على غرار Volar
- 3 أنواع من متغيرات البيئة (التطوير / الاختبار / الإنتاج)
- 5 تحسينات عملية البناء (manualChunks / tree-shaking / lightningcss / / sourcemap)
- وكيل /api للواجهة الخلفية
- التكوين الكامل لـ TypeScript (env.d.ts + auto-imports.d.ts)