⚡ Naif Sameer ⚡
⚡ Naif Sameer ⚡

@naif4web

10 تغريدة 16 قراءة Dec 16, 2021
أثناء بحثي عن الفرق بين
npm و pnpm
وجدت أن npm
تمتلك مشكلة كارثيه 🤯 إسمها
Phantom dependencies
ماهي هذه المشكلة و كيف يمكن حلها
ثريد 👇🏻
أولا ماهو معنى مصطلح
Phantom dependencies 🤔
يعني أنك تستخدم مكتبات packages
في الكود الخاص بك
لكن لم يتم تثبيتها و إضافتها من ضمن ال dependencies في
package.json
👇🏻
كما نلاحظ الصور تحت تم تثبيت مكتبه abc
و تمتلك هذه المكتبة dependencies
و هي
foo and bar
لكن في الكود الخاص بنا يتم إستدعاء و إستخدام foo and bar
بشكل طبيعي و بدون ظهور أخطأ 😬
👇🏻
لكن ماهي المشكلة إذا تم إستخدام
مكتبه foo and bar في
الكود الخاص بنا 🤔
توجد مشكلة كبيره جدا
نحن لم نقم بتثيب foo and bar في
package.json
و لا يمكن التحكم بإصدار المكتبات.
من أجل فهم هذه المشكلة.
تخيل معي أنك تستخدم دوال مكتبه foo الإصدار 2 في الكود الخاص بك
👇🏻
و كل شيء يعمل بشكل طبيعي
لكن مع مرور الوقت
تطورت مكتبه abc و نزل الإصدار 4
و تم تحديث dependencies الخاصه بها
تم إستخدام إصدار 3 من مكتبه foo
لكن انت تستخدم دوال مكتبه foo 2
في الكود
و بعد هذا التحديث لن يشتغل الكود 😬
👇🏻
يتم التحكم بإصدار مكتبه foo من
طرف مكتبه abc
و لا تمتلك أي تحكم بها 😅.
أنت لم تقم بتثيب مكتبه foo او bar في
package.json
لذالك من الطبيعي أنك لا تستطيع التحكم بإصدار المكتبه.
👇🏻
يزداد الوضع سوء إذا كان المشروع كبير
و يتم تطويره من طرف فريق كبير.
يمكنك معرفة أكثر عن هذه الإشكالية
rushjs.io
👇🏻
تستطيع حل هذه الإشكالية و مشاكل كثير إذا
انتقلت من npm إلى pnpm 😁✌🏻
و أهم ما يميز pnpm
⚡ سريعه جدا في ثثبيت packages.
🔒 تجنبك مشكلة Phantom dependencies.
💾 لا تستخدم مساحه تخزين كبيرة عن طريق إنشاء مجلد public يتم تثبيت كل المكتبات فيه و ربط مشروعك مع المكتبات التي تحتاجها
في npm
يتم تثبيت المكتبات في مجلد node_modules منفرد لكل مشروع
هذا يسبب إستخدام مساحه من القرص الصلب بدون فائده 😬.
نلتقي في ثريد أخر 😇
إذا أعجبك الثريد لا تنسى تعمل
ريتويت عشان
يستفيد اكبر عدد من الناس 😊
تابع حسابي @naif4web
لجديد المقالات و النصائح
في مجال البرمجة و تصميم الواجهات Ui

جاري تحميل الاقتراحات...