هل واجهت هذا الموقف من قبل؟ لتوفير مساحة الكمبيوتر، قمت بضبط متجر pnpm على قرص خارجي، ولكن في يوم من الأيام لم تحضر القرص معك، أو أردت تغيير موقع التخزين، وبدأ pnpm في إلقاء أخطاء يقول أنه لا يمكنه العثور على الدليل؟ حتى إعادة توصيل القرص يبدو غريباً؟
هذا في الواقع مرتبط بمبدأ التشغيل الفريد لـ pnpm. اليوم دعونا نتحدث عن آلية “المتجر” (Store) الخاصة بـ pnpm، وكيفية إنقاذها عندما “تفقد الاتصال”!
كيف يوفر pnpm المساحة بالضبط؟
قبل أن نبدأ في الإصلاح، دعونا نراجع سريعاً سحر توفير المساحة في pnpm.
على عكس npm الذي ينسخ مجموعة كاملة من الحزم في node_modules لكل مشروع، يستخدم pnpm مخزن قابل للعنونة بالمحتوى (Content-addressable store) و روابط صلبة (Hard Links).
طريقة عمل pnpm هي أن جميع ملفات الحزم موجودة في الواقع فقط في “مستودع كبير” واحد على جهاز الكمبيوتر الخاص بك، ودليل مشروعك يرتبط فقط بهذا المستودع. هذا لا يوفر مساحة القرص الصلب فحسب، بل يجعل التثبيت سريعاً بشكل مذهل أيضاً.
| العنصر | pnpm | npm |
|---|---|---|
| طريقة التخزين | متجر عالمي + روابط صلبة | نسخة مستقلة لكل مشروع |
| استخدام المساحة | منخفض جداً (يحفظ نسخة واحدة فقط لكل إصدار) | مرتفع (نسخ مكررة) |
| سرعة التثبيت | سريع (فقط إنشاء الروابط) | بطيء (يحتاج إلى الاستخراج والكتابة) |
لماذا يسبب القرص الخارجي أخطاء pnpm؟
عندما تضبط متجر pnpm على قرص خارجي لتوفير مساحة SSD المحلية، تظهر المزالق المحتملة:
| الموقف | الوصف |
|---|---|
| المسار غير صالح | عندما لا يكون القرص موصولاً، لا يمكن لـ pnpm العثور على store-dir الذي تم ضبطه في الأصل، وسيقوم التثبيت بالإبلاغ عن خطأ والخروج مباشرة. |
| تحطم الرابط الصلب | لأن الروابط الصلبة لا يمكنها عبور الأقسام (Partitions)، إذا كان مشروعك على القرص A والمتجر على القرص B، يضطر pnpm لاستخدام النسخ، مما يفقد الميزة الأصلية وقد يسبب أخطاء في التنفيذ بسبب مسارات التخزين المؤقت الفوضوية. |
عند مواجهة هذا الموقف، نحتاج إلى “المعايرة” يدوياً.
الحل 1: المعايرة، إعادة تكوين مسار المتجر
إذا قررت تغيير موقع المتجر، فإن الطريقة الأكثر مباشرة هي إخبار pnpm بمكان المتجر الجديد. يمكنك استخدام الأمر التالي:
pnpm config set store-dir <مسار_الدليل_الجديد_الخاص_بك>
على سبيل المثال، ضبط متجر pnpm إلى ~/.pnpm-store تحت دليل المستخدم الرئيسي:
pnpm config set store-dir ~/.pnpm-store
إذا لم تكن متأكداً من مكان ضبط المتجر الحالي، يمكنك الاستعلام عنه أولاً:
pnpm store path
بعد اكتمال الإعداد، سيعرف pnpm من أين يحصل على الحزم من الآن فصاعداً.
الحل 2: البدء من جديد، إعادة بناء الروابط
أحياناً بعد تغيير المسار، لا يزال المشروع يحتوي على بعض الأخطاء القديمة المتبقية. في هذا الوقت، يكون “البدء من جديد” عادة العلاج الأكثر فعالية:
| الخطوة | الوصف |
|---|---|
| 1 | احذف مجلد node_modules في المشروع. |
| 2 | احذف pnpm-lock.yaml (إذا كان خطأ غريباً ناتجاً عن المسارات، يوصى بإعادة إنشاء ملف القفل أيضاً). |
| 3 | قم بتشغيل pnpm install لإعادة بناء الروابط. |
هذا يجبر pnpm على سحب الروابط الصحيحة من المتجر إلى مشروعك بناءً على أحدث تكوين لديك.
كيف تخصص ليكون أكثر سلاسة؟
إذا كنت تنتقل غالباً بين بيئات مختلفة، أو تقلق بشأن عدم استقرار القرص الخارجي، فإن التكوين المثالي هو: احتفظ بمتجر pnpm على SSD المحلي، ويمكن أن يكون كود المشروع على القرص الخارجي.
لماذا؟ لأن المتجر عادة لا يتغير كثيراً، وعلى الرغم من أن له حجماً، إلا أن المجموع الكلي الموزع عبر المشاريع هو في الواقع أصغر بكثير من npm. الحفاظ على المستودع في مسار محلي مستقر (على سبيل المثال القيمة الافتراضية لنظام macOS ~/Library/pnpm/store) يسمح لك بتهيئة مشاريع جديدة في مكان آخر بسلاسة حتى بدون القرص الخارجي.
مفهوم التطوير بدون حالة (Stateless) هذا يجعل بيئة التطوير الخاصة بك أكثر مرونة!
الخلاصة: الحفاظ على استقرار المتجر يوفر المتاعب
المفتاح لإدارة متجر pnpm يكمن في كلمة “الاستقرار”. إذا واجهت مشاكل في المسار، يمكنك القيام بذلك:
| الخطوة | الوصف |
|---|---|
| 1 | تحقق أولاً وقم بتغيير إعداد store-dir. |
| 2 | تنظيف الحزم القديمة: pnpm store prune (هذا يساعدك على مسح ملفات الحزم التي لا يستخدمها أحد، مما يقلل حجم القرص الصلب) |
| 3 | إعادة تثبيت الحزم pnpm install |
آمل أن تساعد هذه المقالة الجميع على القفز من حفرة مسار pnpm والاستمتاع بمتعة التطوير عالي السرعة!