وحدات Nuxt: الصور والمصادقة وi18n
ثبّت واضبط @nuxt/image للصور المحسّنة، و@nuxtjs/auth-next للمصادقة، و@nuxtjs/i18n للتدويل
وحدات Nuxt: الصور والمصادقة وi18n درس مجاني في Frontend Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Frontend Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Frontend Academy 4 دروس في المجموع.
ما وحدات Nuxt؟
الوحدات هي آلية التوسعة الرسمية في Nuxt. تُثبَّت في nuxt.config.ts وتتصل بدورة البناء ووقت التشغيل وخادم التطوير. معظم ميزات المنظومة البيئية عبارة عن وحدات.
تثبيت وحدة
ثبّت الوحدة باستخدام npm install، ثم أضفها إلى modules في nuxt.config.ts.
// nuxt.config.ts
export default defineNuxtConfig({
modules: [
'@nuxt/image',
'@sidebase/nuxt-auth',
'@nuxtjs/i18n'
]
});@nuxt/image
يستبدل <img> بـ <NuxtImg> محسَّن — تنسيق تلقائي (WebP/AVIF)، وsrcset متجاوب، وتحميل كسول، وتكامل مع CDN.
<template>
<NuxtImg
src="/photos/sunset.jpg"
alt="Sunset"
width="800"
height="600"
format="webp"
loading="lazy"
sizes="sm:100vw md:50vw lg:800px"
/>
</template>NuxtPicture للتوجيه الفني
ينشئ <NuxtPicture> عنصر <picture> مع عدة وسوم <source> للتوجيه الفني.
<NuxtPicture src="/hero.jpg" alt="" :imgAttrs="{ width: 1200, height: 600 }" />تهيئة موفّر الصور
هيّئ موفّر CDN (مثل Cloudinary وimgix وVercel) لتوجيه جميع الصور من خلاله.
export default defineNuxtConfig({
modules: ['@nuxt/image'],
image: {
provider: 'cloudinary',
cloudinary: { baseURL: 'https://res.cloudinary.com/yourname/image/fetch/' }
}
});@sidebase/nuxt-auth (المصادقة)
وحدة مصادقة تدعم عدة موفّرين: OAuth المتوافق مع NextAuth، وبيانات الاعتماد المحلية، وتدفقات المصادقة المخصصة.
// nuxt.config.ts
export default defineNuxtConfig({
modules: ['@sidebase/nuxt-auth'],
auth: {
baseURL: process.env.AUTH_ORIGIN,
provider: { type: 'authjs' }
}
});استخدام المصادقة في الصفحات
يوفّر composable useAuth() الجلسة والحالة وعمليتي signIn/signOut.
<script setup>
const { data: session, status, signIn, signOut } = useAuth();
</script>
<template>
<button v-if="status === 'unauthenticated'" @click="signIn('github')">
Sign in with GitHub
</button>
<div v-else>
Welcome, {{ session.user.name }}
<button @click="signOut">Sign out</button>
</div>
</template>حماية المسارات باستخدام Middleware
استخدم auth middleware في صفحة لطلب المصادقة.
<script setup>
definePageMeta({ middleware: 'auth' });
</script>@nuxtjs/i18n (التدويل)
تدعم وحدة i18n الرسمية لغات متعددة، ومسارات مسبوقة بالمنطقة المحلية، وملفات ترجمة تُحمّل كسولًا، ووسم hreflang ملائمًا لتحسين محركات البحث.
export default defineNuxtConfig({
modules: ['@nuxtjs/i18n'],
i18n: {
locales: [
{ code: 'en', file: 'en.json' },
{ code: 'tr', file: 'tr.json' }
],
defaultLocale: 'en',
lazy: true,
langDir: 'locales/'
}
});الترجمة داخل المكوّنات
استخدم $t في القوالب أو useI18n في setup.
<script setup>
const { t, locale } = useI18n();
</script>
<template>
<h1>{{ $t('welcome') }}</h1>
<p>{{ t('greeting', { name: 'Alice' }) }}</p>
<button @click="locale = locale === 'en' ? 'tr' : 'en'">
{{ $t('switch_lang') }}
</button>
</template>المسارات المسبوقة بالمنطقة المحلية
تصبح عناوين URL بالشكل /en/about و/tr/about. استخدم localePath('/about') لإنشاء روابط مسبوقة بالمنطقة المحلية بشكل صحيح.
<NuxtLink :to="localePath('/profile')">{{ $t('profile') }}</NuxtLink>وحدات شائعة أخرى
@pinia/nuxt (إدارة الحالة)، و@vueuse/nuxt (أكثر من 200 composable)، و@nuxtjs/tailwindcss (إعداد Tailwind)، و@nuxtjs/color-mode (الوضع الداكن)، و@nuxt/content (نظام إدارة محتوى قائم على الملفات).
كتابة وحدة مخصصة
بالنسبة إلى وظائف monorepo الداخلية، اكتب وحدة تتصل بدورة حياة Nuxt. الوحدات قوية؛ إذ يمكنها تسجيل المكوّنات، وتهيئة وقت التشغيل، ومسارات الخادم، وخطوات البناء.
اختبار سريع
أي وحدة في Nuxt 3 توفّر تحميلًا محسَّنًا للصور مع WebP/AVIF تلقائي وsrcset متجاوب؟
مراجعة: وحدات Nuxt
توسّع الوحدات Nuxt، وتُثبَّت عبر مصفوفة modules في nuxt.config.ts. استخدم @nuxt/image للصور المحسَّنة (التنسيق التلقائي وsrcset والتحميل الكسول). استخدم @sidebase/nuxt-auth (أو nuxt-auth) للمصادقة. استخدم @nuxtjs/i18n للترجمات والمسارات المسبوقة بالمنطقة المحلية. وهناك أيضًا: @pinia/nuxt و@vueuse/nuxt و@nuxtjs/tailwindcss و@nuxt/content. اكتب وحدات مخصصة لإعادة الاستخدام الداخلي.
الأسئلة الشائعة
هل درس «وحدات Nuxt: الصور والمصادقة وi18n» مجاني؟
نعم — نص درس «وحدات Nuxt: الصور والمصادقة وi18n» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Frontend Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Frontend Academy 4 دروس في المجموع.
ماذا ستتعلم في «وحدات Nuxt: الصور والمصادقة وi18n»؟
ثبّت واضبط @nuxt/image للصور المحسّنة، و@nuxtjs/auth-next للمصادقة، و@nuxtjs/i18n للتدويل تتمرن على Frontend Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Frontend Academy؟
لا تُشترط خبرة سابقة. Frontend Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «وحدات Nuxt: الصور والمصادقة وi18n»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Frontend Academy هذا؟
نعم. كل درس في Frontend Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- التوجيه القائم على الملفات والاستيرادات التلقائية
- useFetch وuseAsyncData
- وحدات Nuxt: الصور والمصادقة وi18n
- النشر: ثابت مقابل SSR