«npm WARN requires a peer»: كيفية إصلاح وفهم جوهر الخطأ

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

مقدمة: لماذا يصرخ npm عليك؟

\n\n

هل سبق لك أن قمت بتشغيل npm install\n\n

npm WARN ts-patch@3.2.1 requires a peer of typescript@>=4.0 but none is installed. You must install peer dependencies yourself.
\n\n

مألوف؟ إذا كان الأمر كذلك، فأنت لست وحدك. هذا السؤال على Stack Overflow حصد آلاف المشاهدات وعشرات التعليقات من مطورين، مثلك تمامًا، أرادوا فقط تثبيت حزمة، لكنهم حصلوا على صداع. اليوم سنفهم ما هي التبعيات النظيرة (peer dependencies)، ولماذا يصر npm بشدة على تثبيتها، وكيفية التعامل معها بشكل صحيح في مشاريع TypeScript. ونعم، لن تكون هذه وثائق مملة، بل تحليلًا حيًا مع أمثلة على الكود.

\n\n

هيا بنا!

\n\n

ما هي التبعيات النظيرة ولماذا هي مطلوبة؟

\n\n

تخيل أنك تقوم بتجميع أحجية (puzzle). لديك الصورة الرئيسية (مشروعك) وعدة قطع (حزم). بعض القطع تتناسب تمامًا مع بعضها البعض، ولكن فقط إذا كنت تستخدم الإطار الصحيح. في عالم npm، هذا «الإطار» هو التبعية النظيرة (peer dependency).

\n\n

التبعية النظيرة هي متطلب من حزمة بأن مكتبة معينة يجب أن تكون مثبتة في المشروع، لكن الحزمة نفسها لن تقوم بتثبيتها. لماذا؟ لأن هذه المكتبة يجب أن تكون موجودة لديك بالفعل، والحزمة ببساطة «تتعامل» معها دون إنشاء نسخ مكررة.

\n\n

على سبيل المثال، الحزمة ts-patch (أداة شائعة لـ TypeScript) تتطلب أن يكون typescript مثبتًا في المشروع. لكن ts-patch لا يقوم بتثبيت TypeScript بنفسه - فهو يفترض أنك قمت بإضافته بالفعل. إذا لم يكن TypeScript موجودًا، يصدر npm ذلك التحذير.

\n\n

لماذا هذا مهم لمشاريع TypeScript؟

\n\n

TypeScript ليس مجرد لغة، بل هو نظام بيئي. العديد من الحزم (مثل @types/react، ts-loader، eslint-plugin-typescript) تعمل فوق TypeScript. إذا كان لديك إصدار TypeScript 5.0 مثبتًا، والحزمة تتطلب 4.0+، فكل شيء على ما يرام. ولكن إذا لم يكن TypeScript موجودًا على الإطلاق، تبدأ المشاكل.

\n\n

هذا مثال واقعي من الحياة. لنفترض أنك تكتب سكريبتًا صغيرًا بلغة TypeScript وتستخدم ts-patch لتحويل الكود. تقوم بتشغيل:

\n\n
npm install ts-patch --save-dev
\n\n

وتحصل على:

\n\n
npm WARN ts-patch@3.2.1 requires a peer of typescript@>=4.0 but none is installed.\nYou must install peer dependencies yourself.
\n\n

ماذا تفعل؟ هل تذعر؟ لا. فقط قم بتثبيت TypeScript:

\n\n
npm install typescript --save-dev
\n\n

تم حل المشكلة. ولكن ماذا لو كان لديك بالفعل TypeScript، ولكن بإصدار مختلف؟ هنا يبدأ الجزء المثير للاهتمام.

\n\n

مقارنة الأساليب: كيفية تثبيت التبعيات النظيرة

\n\n

هناك عدة طرق للتعامل مع هذا الخطأ. دعنا نقارنها بمثال مشروع TypeScript.

\n\n

الطريقة 1: التثبيت اليدوي (الكلاسيكية)

\n\n

أبسط وأضمن طريقة هي قراءة التحذير وتثبيت الحزمة المطلوبة يدويًا. ترى أن typescript@>=4.0 مطلوب، وتقوم بإضافته:

\n\n
npm install typescript@^4.0 --save-dev
\n\n

الإيجابيات:

\n
    \n
  • تحكم كامل في الإصدار.
  • \n
  • لا توجد مفاجآت مخفية.
  • \n
\n

السلبيات:

\n
    \n
  • تحتاج إلى قراءة رسائل npm بعناية.
  • \n
  • إذا كان هناك العديد من الحزم، تصبح العملية روتينية.
  • \n
\n\n

هذه الطريقة مثالية للمشاريع الصغيرة حيث تعرف بالضبط التبعيات التي تحتاجها.

\n\n

الطريقة 2: التثبيت التلقائي باستخدام npx أو الإضافات

\n\n

بعض الأدوات، مثل npm-check أو install-peerdeps، يمكنها تثبيت جميع التبعيات النظيرة تلقائيًا لحزمة معينة. قم بتثبيت الأداة بشكل عام:

\n\n
npm install -g install-peerdeps
\n\n

المدونات

توصيات الكتب