نهج آراء لدعم منصات متعددة مع React Native باستخدام مساحات عمل الغزل monorepo.
تحقق من تشغيل React Native في كل مكان للحصول على دليل متعمق حول كيف ولماذا أوصي بتجربة هذا النهج إذا كنت تخطط لدعم منصات متعددة في تطبيقك.

يستخدم هذا monorepo مساحات عمل الغزل و typeScript لدعم المشروع الأصلي React.
تتمثل الفكرة الأساسية في عزل رمز تطبيق JavaScript من تكوينات النظام الأساسي (الرمز الأصلي + حزم التطبيق مثل Metro و WebPack).
تحدث هذه العزلة باستخدام مساحات عمل مختلفة: لدينا مساحة عمل app لرمز تطبيق JavaScript ، ومساحة عمل للهاتف mobile لتكوين REACT Native Mobile ، ومساحة عمل macos لتكوين MACOS الأصلي React ، وما إلى ذلك.
نحن نحتضن nohoist تمامًا للسماح باستخدام إصدارات مختلفة من React Native على كل منصة (الموصى بها ولكن غير مطلوبة) ، مما يؤدي إلى تبسيط اعتماد التحديثات الأصلية الجديدة React.
بفضل Nohoist ، يمكن لكل مساحة عمل منصة ( mobile ، macos ، إلخ) أن تعتمد على أي إصدار من React Native ، بغض النظر عن الإصدار الذي تستخدمه مساحات عمل النظام الأساسي الأخرى. على سبيل المثال ، يمكننا استخدام [email protected] على تطبيق الهاتف المحمول و [email protected] على تطبيق MacOS-طالما أن رمز تطبيق JavaScript يدعم كلا الإصدارين.
يعزز هذا النهج التحديثات الأصلية React Tergual على التحديثات في LockStep.
لمزيد من التفاصيل ، تحقق من "Running React Native في كل مكان: إعدادات عمل الغزل Monorepo".
️ يرجى ملاحظة أنني لا أقول أن هذه هي الطريقة الصحيحة للقيام بمفاعل Monorepos الأصلي. هذا مجرد نهج أستمتع باستخدامه على قواعد الرمز الأكبر :)
يمكنك استخدام هذا الريبو كخليفي ، وإزالة مساحات العمل للمنصات التي لا تحتاجها ، أو يمكنك إنشاء هذا الإعداد من نقطة الصفر إذا كنت ترغب في فهم كيفية عمله تمامًا.
[email protected]:mmazzarolo/react-native-universal-monorepo.gitcd react-native-universal-monorepo && yarnتعليمي خطوة بخطوة على إنشاء هذا المستودع من الصفر:
البرنامج التعليمي للتلفزيون و next.js من thefinnomenon:
موارد إضافية:
الأوامر تطوير وبناء:
yarn android:metro : ابدأ خادم المترو لنظام Android/iOSyarn android:start : ابدأ في تطوير تطبيق Androidyarn android:studio : افتح تطبيق Android على Android Studioyarn ios:metro : ابدأ خادم المترو لنظام Android/iOSyarn ios:start : ابدأ في تطوير تطبيق iOSyarn ios:pods : تثبيت تبعيات IOS Cocoapodsyarn ios:xcode : افتح تطبيق iOS على Xcodeyarn macos:metro : ابدأ خادم المترو ل macosyarn macos:start : ابدأ في تطوير تطبيق MacOSyarn macos:pods : تثبيت Macos Cocoapods تبعياتyarn macos:xcode : افتح تطبيق MacOS على Xcodeyarn web:start : ابدأ في تطوير تطبيق الويبyarn web:build : إنشاء بناء إنتاج لتطبيق الويبyarn electron:start : ابدأ في تطوير تطبيق الإلكترونyarn electron:package:mac : حزمة إنتاج ثنائي لتطبيق الإلكترون لـ MacOSyarn electron:package:win : حزمة إنتاج ثنائي لتطبيق الإلكترون لنظام التشغيل Windowsyarn electron:package:linux : حزمة إنتاج ثنائي لتطبيق الإلكترون لـ Linuxyarn browser-ext:start : ابدأ في تطوير امتداد المتصفحyarn browser-ext:build : إنشاء بناء إنتاج لتمديد المتصفحyarn windows:metro : ابدأ خادم المترو لنظام التشغيل Windowsyarn windows:start : ابدأ في تطوير تطبيق Windowsyarn tv:android:metro : ابدأ خادم المترو لـ Android TVyarn tv:android:start : ابدأ في تطوير تطبيق Android TVyarn tv:android:studio : افتح تطبيق Android TV في Android Studioyarn tv:tvos:metro : ابدأ خادم المترو لـ TVOSyarn tv:tvos:start : ابدأ في تطوير تطبيق TVOSyarn tv:tvos:xcode : افتح تطبيق TVOS في Xcodeyarn tv:tvos:pods : تثبيت تبعيات TVOS Cocoapodsyarn next:start : ابدأ تطبيق Next.jsyarn next:build : إنشاء تطبيق Next.jsyarn next:serve : خدمة تطبيق Next.jsأوامر أخرى (نستخدم المراكز الفائقة لتشغيل هذه الأوامر على جميع مساحات العمل):
yarn lint : الوبر كل مشروعyarn lint:fix : lint + إصلاح كل مشروعyarn test : قم بتشغيل اختبارات كل مشروعyarn typecheck : قم بتشغيل مجموعة TypeScript على كل مشروع أثناء العمل على React Native في Monorepo ، ستلاحظ أن العديد من الحزم لن تعمل بشكل صحيح عند الرفع-إما لأنها تحتاج إلى ربطها أصليًا أو لأنها تنتهي مرتين ، وكسر البناء (على سبيل المثال ، react ، react-dom ).
هذه ليست مشكلة مع النهج المستخدم في هذا المشروع في حد ذاته. إنها مشكلة شائعة مع Monorepos.
لإصلاح هذه المشكلات ، نضع علامة عليها على أنها Nohoist ، لذلك سيتم تثبيتها في كل حزمة تعتمد عليها.
في هذا المونوروبو ، يمكنك رؤية مثال على هذه المكتبات في react-native-async-storage .
في Bundler Bundler و WebPack المستخدمة عبر Monorepo ، نستخدم مجموعة من أدوات الإنشاء لضمان حل حزم Nohoisted بشكل صحيح.
لذا ، طالما قمت بإضافة هذه المكتبات إلى قائمة nohoist ، يجب أن تكون على ما يرام؟
نحن نسعى جاهدين لجعل هذا الإعداد متوافقًا مع Yarn Classic - ولكن مع بعض التعديلات ، فإنه متوافق مع Yarn 2+ أيضًا (توفير جميع فوائد Yarn 2+).
انظر #22 لمزيد من المعلومات.
yarn set version berry في جذر المشروع. سوف ينشئ ملف .yarnrc.yml ..yarnrc.yml لضمان إنشاء أدلة node_modules في كل مساحة عمل: nodeLinker : node-modules
nmHoistingLimits : workspacesnmHositingLimits كيفية رفع التبعيات لكل مساحة عمل. من خلال تعيينه على workspaces سيتم تثبيت جميع التبعيات في كل من node_modules الخاصة بكل مساحة عمل بدلاً من رفعها إلى المجلد الجذري. هذا يعني أنه يمكنك الآن أنه يمكنك بأمان قسم noHoist في package.json Root.json.تحقق من دليل "البدء" في Yarn 2+لمزيد من المعلومات.
في بعض الحالات ، لن يتمكن Yarn Classic من حل التبعيات بشكل صحيح والتي لها peerDependency على react-native .
انظر #22 لبعض الحلول. يعد الإصلاح على ريبو react-native-monorepo-tools .
المساهمات والمناقشات والتعليقات مرحب بها! يرجى السؤال عما إذا كانت هناك أي خطط نشطة لتغييرات الميزات قبل تقديم PRS جديدة؟