يعد نشر تطبيق Vite/React على صفحات GitHub إنجازًا مثيرًا، ولكن العملية قد تأتي في بعض الأحيان مع تحديات غير متوقعة، خاصة عند التعامل مع الصور والأصول. سيرشدك منشور المدونة هذا خلال العملية بأكملها، بدءًا من النشر الأولي وحتى استكشاف المشكلات الشائعة وإصلاحها والتوصل إلى حلول فعالة.
سواء كنت مبتدئًا أو شخصًا ذو خبرة، سيساعدك هذا الدليل على تجنب الأخطاء الشائعة ونشر تطبيق Vite/React الخاص بك بنجاح مع عرض جميع الأصول بشكل صحيح.
قبل أن نتعمق، تأكد من أن لديك ما يلي:
أولاً، تأكد من تهيئة تطبيق Vite/React بشكل صحيح وأنه يعمل على المضيف المحلي. يمكنك إنشاء مشروع Vite أساسي كما يلي:
npm create vite@latest
تثبيت التبعيات:
npm install
قم بتشغيل المشروع محليًا للتأكد من أن كل شيء يعمل:
npm run dev
بمجرد أن يصبح مشروعك جاهزًا، ادفعه إلى مستودع GitHub الخاص بك.
تتوقع صفحات GitHub أن يتم تقديم التطبيق من عنوان URL أساسي محدد، وهو عادةً اسم المستودع الخاص بك. قم بتحديث ملف vite.config.js ليعكس هذا:
import { defineConfig } from 'vite' import react from '@vitejs/plugin-react' export default defineConfig({ base: process.env.NODE_ENV === 'production' ? '/your-repo-name/' : '/', plugins: [react()], })
يضمن الخيار الأساسي أن التطبيق يستخدم المسار الأساسي الصحيح عند النشر.
ستحتاج إلى تثبيت حزمة gh-pages للتعامل مع عملية النشر.
npm install gh-pages --save-dev
في ملف package.json الخاص بك، أضف البرامج النصية التالية لأتمتة عملية النشر:
"scripts": { "predeploy": "npm run build", "deploy": "gh-pages -d dist" }
تشغيل النشر:
npm run deploy
في هذه المرحلة، يجب أن يكون مشروعك مباشرًا على https://
بعد النشر، قد تلاحظ أن التطبيق يقوم بتحميل صفحة فارغة. يحدث هذا غالبًا بسبب مشكلات التوجيه. افتراضيًا، يتم استخدام BrowserRouter من React-router-dom، والذي يعتمد على التوجيه من جانب الخادم، لكن GitHub Pages يخدم ملفات ثابتة ولا يتعامل مع المسارات من جانب العميل.
الحل: استخدم HashRouter
لحل هذه المشكلة، قم بالتبديل من BrowserRouter إلى HashRouter في ملف Index.js أو main.jsx.
import { HashRouter } from 'react-router-dom'; createRoot(document.getElementById('root')).render();
يستخدم HashRouter رمز التجزئة (#) في عنوان URL لتتبع حالة التنقل، مما يسمح لصفحات GitHub بخدمة مسارات مختلفة بشكل صحيح دون إرجاع 404.
بعد إصلاح مشكلة الصفحة الفارغة، هناك مشكلة أخرى قد تواجهها وهي أن التطبيق يعمل على الصفحة الرئيسية ولكنه يظهر خطأ 404 عند الانتقال إلى مسارات أخرى، خاصة إذا كنت تصل مباشرة إلى مسار مثل /blogs أو /projects.
يحدث هذا لأن صفحات GitHub تعرف فقط كيفية خدمة ملف Index.html ولا تتعرف على المسارات التي يديرها React Router.
الحل: التعامل مع الأخطاء 404 في إعدادات صفحات GitHub
لإصلاح ذلك، تحتاج إلى إنشاء ملف 404.html في المجلد العام/ الخاص بك. سيضمن هذا الملف أن صفحات GitHub تخدم ملف Index.html الخاص بك لأية مسارات لا يتعرف عليها، مما يسمح لـ React Router بمعالجة التوجيه:
إحدى مشكلات النشر الأكثر شيوعًا هي عدم تحميل الصور بشكل صحيح. على الرغم من أنها تعمل بشكل جيد على المضيف المحلي، فقد تلاحظ روابط صور معطلة بعد النشر على صفحات GitHub.
على سبيل المثال، يمكنك الإشارة إلى صورة كهذه في مكوناتك:
المشكلة: مسارات الصور غير صحيحة
المشكلة هنا هي أن المسارات المطلقة (التي تبدأ بـ /) لا تعمل بشكل جيد عند نشر التطبيق في دليل فرعي (على سبيل المثال، /your-repo-name/). تحاول صفحات GitHub العثور على الصورة على https://
الحل: استخدم BASE_URL
لإصلاح هذه المشكلة، انقل جميع صورك إلى العامة/الصور، على الرغم من أن ذلك اختياري، فإنني أوصي بشدة أن تفعل ذلك. ستقوم بإضافة BASE_URL بشكل ديناميكي إلى مسارات الصور بناءً على البيئة:
const BASE_URL = import.meta.env.BASE_URL;
يضمن هذا استخدام المسار الصحيح في التطوير (المضيف المحلي) وفي الإنتاج (صفحات GitHub).
بعد تنفيذ الإصلاحات الخاصة بالتوجيه ومسارات الصور، قم بإعادة بناء تطبيقك وإعادة نشره:
npm run build npm run deploy
يجب الآن نشر تطبيق Vite/React الخاص بك بشكل كامل مع عرض جميع الصور بشكل صحيح والتعامل مع جميع المسارات بشكل صحيح.
في ملخص:
من خلال هذه الخطوات، يجب أن يكون تطبيق Vite/React نشطًا ويعمل بسلاسة على صفحات GitHub. أتمنى لك البرمجة والنشر!
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3