كمطورين لجافا سكريبت، نعلم جميعًا تبعيتين مختلفتين في مشاريعنا، التبعيات وتبعيات التطوير، ولكن ماذا عن التبعيات النظيرة؟
في هذه السلسلة، سنفحص هذه التبعية الأقل شيوعًا في Javascript. سوف ندرس ما هي، وما أحتاج إلى معرفته كمستخدم للمكتبة، وما هي أفضل الممارسات لمؤلفي المكتبة.
دعونا نلخص الأنواع الشائعة المختلفة:
التبعيات : هذه هي الأدوات المستخدمة في التطبيق الخاص بك؛ وخير مثال على ذلك هو رد الفعل والزاوي والتعبير. عندما يكون تطبيقك في مرحلة الإنتاج، سيتم تشغيل كود المكتبات على التبعيات تحت الغطاء وتشغيل تطبيقك.
تبعيات التطوير: ستستخدم هذه الأدوات المساعدة لإنشاء تطبيقك. ستجد هنا مكتبات لتجميع أو تحليل التعليمات البرمجية الخاصة بك ومكتبات لتشغيل الاختبار.
يحدد المؤلفون مكتبات محددة باعتبارها تبعية نظير عندما يطلبون تثبيتها في مساحة العمل/المشروع حتى يعمل كل شيء كما هو متوقع. يخبرون NPM (والمطورين الذين يقومون بتثبيت المكتبة) أن الحزمة تتطلب إصدارًا محددًا لحزمة أخرى (أو مجموعة من الإصدارات) لتعمل بشكل صحيح. ومع ذلك، يظل المستخدم مسؤولاً عن تثبيت تلك التبعية وإدارتها.
لنتخيل مثالاً: أنت تقوم بإنشاء أداة مساعدة لإطار العمل المفضل لديك، والذي يجب تثبيته في البيئة التي سيتم تشغيل مكتبتك فيها. طريقة تحديد هذا السيناريو بدقة هي استخدام ميزة NPM PeerDependency. فهو يوفر إرشادات واضحة للتكامل السلس لمكتبتك.
هذه الممارسة شائعة بشكل خاص في المكتبات التي تعمل كـ "مكونات إضافية"، حيث تحتاج إلى الإشارة إلى متطلبات مساحة العمل للحصول على الوظيفة المناسبة.
دعونا نحلل مكتبة React الشهيرة، منتقي تاريخ التفاعل؛ إذا نظرنا إلى شكل package.json الخاص به اليوم، يمكننا أن نقول أننا نحتاج على الأقل إلى إصدار React ^16.9.0 حتى يعمل منتقي تاريخ التفاعل بشكل صحيح.
"peerDependencies": { "react": "^16.9.0 || ^17 || ^18", "react-dom": "^16.9.0 || ^17 || ^18" },
إذا فشلنا في الالتزام بهذا المطلب، فسينشأ سلوك غير متوقع.
تحدث تعارضات في الإصدارات عندما تعتمد الحزم في المشروع على إصدارات مختلفة من نفس المكتبة. يمكن أن يؤدي هذا إلى حدوث أخطاء، خاصة بالنسبة للمكتبات مثل React، حيث تعد مشاركة نفس المثيل أمرًا بالغ الأهمية لإدارة الحالة واتصال المكونات. بدون اعتمادات الأقران، يمكن تثبيت إصدارات مكتبة متعددة، مما يؤدي إلى سلوك غير متوقع.
لمنع هذه المشكلات، تسمح اعتماديات الأقران لمؤلفي الحزم بتحديد إصدار التبعية الذي تتطلبه حزمتهم دون تثبيته مباشرة. يؤدي هذا إلى نقل المسؤولية إلى المطور الذي يستخدم الحزمة، مما يضمن قيامه بتثبيت إصدار تبعية واحد متوافق. على سبيل المثال، تستخدم المكتبات مثل منتقي التاريخ التفاعلي وجهاز التوجيه التفاعلي التبعيات النظيرة لضمان عملها بسلاسة مع نفس إصدار React في المشروع.
تخيل هذا السيناريو: أنت تقوم بإنشاء مكتبة لمشاركة عامل تشغيل رائع لـ rxjs. إذا قمت بتعيين rxjs باعتباره تبعية بدلاً من اعتماد نظير، فستقوم مكتبتك بتثبيت نسختها الخاصة من rxjs. قد لا يبدو هذا أمرًا كبيرًا في البداية، لكنه في الواقع قد يؤدي إلى تعارض في الإصدارات.
إذا كان المشروع الذي يقوم بتثبيت مكتبتك يستخدم بالفعل إصدارًا مختلفًا من rxjs، فقد يتسبب ذلك في حدوث مشكلات كبيرة. قد ينتهي التطبيق بمثيلين من rxjs (واحد من مكتبتك والآخر من المشروع نفسه). نظرًا لأن rxjs يعتمد بشكل كبير على العناصر المشتركة التي يمكن ملاحظتها والاشتراكات، فإن وجود نسختين يعملان في وقت واحد يمكن أن يؤدي إلى سلوك غير متوقع، مثل عدم مزامنة التدفقات بشكل صحيح أو فقدان الأحداث.
باستخدام التبعيات النظيرة بدلاً من ذلك، يمكنك تجنب هذه المشكلة. سترسل الحزمة الخاصة بك إشارة للمشروع بأنها تتوقع وجود إصدار معين (أو نطاق) من rxjs، لكنها لن تقوم بتثبيت الإصدار الخاص بها. بهذه الطريقة، سيستخدم المشروع نسخة واحدة من rxjs التي تشاركها مكتبتك وأجزاء أخرى من قاعدة التعليمات البرمجية، مما يضمن أن كل شيء يعمل بسلاسة وانسجام.
قد لا تتم مناقشة تبعيات الأقران بشكل شائع مثل التبعيات أو تبعيات التطوير، ولكنها تلعب دورًا حاسمًا في ضمان التوافق وتجنب تعارضات الإصدارات في المشاريع المعقدة. من خلال التحديد الواضح لإصدار التبعية المشتركة الذي تحتاجه المكتبة دون تثبيته مباشرة، تتيح تبعيات الأقران للمطورين الحفاظ على التحكم في بيئة المشروع الخاصة بهم.
الهدف من هذا المنشور الأول هو إنشاء أساس فهم جيد لتبعيات الأقران. في الفصل التالي من هذه السلسلة، سوف نستكشف بطريقة أكثر عملية الجوانب المختلفة لاعتماديات الأقران كمستخدم للمكتبات ذات تبعيات الأقران، وكيفية التغلب على المشكلات الشائعة، وكيف تتصرف في مديري حزم جافا سكريبت المختلفين.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3