إعداد pnpm

الدرس 3 من 18

0% مكتمل

الفصل الأول: البداية

إعداد pnpm كمدير حزم افتراضي

تعرف على pnpm وكيفية جعله مدير الحزم الافتراضي لمشاريعك

ما هو pnpm؟

pnpm (اختصار لـ Performant npm) هو مدير حزم بديل لـ npm يتميز بالسرعة والكفاءة في استخدام مساحة القرص. تم تطويره ليحل مشاكل الأداء والمساحة التي تواجه npm التقليدي.

سرعة فائقة

أسرع بـ 2x من npm في تثبيت الحزم

توفير المساحة

يوفر حتى 70% من مساحة القرص

أمان أعلى

يمنع الوصول غير المصرح به للحزم

Monorepos مدمج

دعم ممتاز للمشاريع متعددة الحزم

مقارنة الأداء

عند تثبيت React و Angular و Vue معاً:

  • npm: 51 ثانية، 438 MB
  • yarn: 31 ثانية, 404 MB
  • pnpm: 14 ثانية، 162 MB ⚡

تثبيت pnpm باستخدام Volta

أفضل طريقة لتثبيت pnpm هي استخدام Volta التي ثبتناها في الدرس السابق:

volta install pnpm

هذا الأمر سيقوم بـ:

  • تحميل أحدث نسخة مستقرة من pnpm
  • تثبيتها وإعدادها تلقائياً
  • ربطها مع Volta لإدارة أفضل
  • جعلها متاحة في جميع المشاريع

التحقق من التثبيت:

pnpm --version # أو pnpm -v

يجب أن ترى رقم النسخة مثل: 8.15.0 أو أحدث

لماذا Volta لتثبيت pnpm؟

استخدام Volta لتثبيت pnpm يضمن التوافق بين نسخ Node.js و pnpm في مشاريعك المختلفة، ويسهل عملية التحديث والإدارة.

تعيين pnpm كمدير حزم افتراضي

1. تفعيل Corepack (موصى به):

Corepack هي أداة مدمجة في Node.js v16.13+ تسمح بإدارة مديري الحزم. لتفعيلها:

corepack enable corepack prepare pnpm@latest --activate

2. إنشاء Alias (اختياري):

لجعل npm يشير إلى pnpm تلقائياً، أضف هذه الأسطر:

على Windows (PowerShell):

# افتح ملف profile notepad $PROFILE # أضف هذا السطر: Set-Alias -Name npm -Value pnpm

على macOS/Linux (Bash/Zsh):

# افتح ملف shell config nano ~/.bashrc # أو ~/.zshrc # أضف هذا السطر: alias npm='pnpm' # احفظ وأعد التحميل source ~/.bashrc

ملاحظة مهمة

إنشاء Alias يجعل كل أوامر npm تستخدم pnpm، لكن قد يسبب ارتباكاً في بعض المشاريع القديمة. استخدمه فقط إذا كنت متأكداً من رغبتك في استخدام pnpm حصرياً.

أوامر pnpm الأساسية

pnpm متوافق مع أوامر npm، لكن بأداء أفضل:

الأمر الوصف
pnpm init إنشاء مشروع Node.js جديد
pnpm install or pnpm i تثبيت جميع التبعيات
pnpm add <package> إضافة حزمة جديدة
pnpm add -D <package> إضافة حزمة تطوير
pnpm remove <package> حذف حزمة
pnpm update تحديث الحزم
pnpm run <script> تشغيل سكربت
pnpm list عرض الحزم المثبتة

مثال عملي - إنشاء مشروع جديد:

# إنشاء مجلد المشروع mkdir my-awesome-project cd my-awesome-project # تهيئة المشروع pnpm init # تثبيت Express pnpm add express # تثبيت أداة تطوير pnpm add -D nodemon # تشغيل المشروع pnpm run dev

مميزات pnpm الفريدة

1. Content-addressable Storage:

pnpm يحفظ نسخة واحدة فقط من كل حزمة على جهازك، ويستخدم symlinks للربط. هذا يعني:

  • تثبيت React مرة واحدة يكفي لجميع المشاريع
  • توفير هائل في المساحة (قد يصل لـ GBs)
  • تثبيت أسرع للمشاريع الجديدة

مثال توضيحي

تخيل أن لديك 10 مشاريع تستخدم React v18.2.0:

  • npm: سيحفظ 10 نسخ كاملة من React (حوالي 800 MB)
  • pnpm: سيحفظ نسخة واحدة فقط (80 MB) ويربطها للمشاريع الـ10 ⚡

2. Strict node_modules:

pnpm يمنع الوصول للحزم غير المدرجة في package.json، مما يمنع الأخطاء الخفية:

// مع npm: هذا قد يعمل حتى لو لم تثبت lodash مباشرة // (لأنها تبعية لحزمة أخرى) const _ = require('lodash'); // مع pnpm: سيعطي خطأ إذا لم تثبت lodash صراحة // هذا يجبرك على كتابة كود أكثر وضوحاً ✓

3. Workspace Support:

دعم ممتاز للمشاريع الكبيرة (Monorepos):

# pnpm-workspace.yaml packages: - 'packages/*' - 'apps/*'

الانتقال من npm إلى pnpm

إذا كان لديك مشروع موجود بالفعل يستخدم npm:

الخطوات:

  1. احذف node_modules القديم:
# Windows rmdir /s node_modules del package-lock.json # macOS/Linux rm -rf node_modules rm package-lock.json
  1. ثبت الحزم باستخدام pnpm:
pnpm install
  1. تحديث السكربتات (إن وجدت):
// في package.json - استبدل npm بـ pnpm { "scripts": { "install": "pnpm install", // بدلاً من npm install "build": "pnpm run build" // بدلاً من npm run build } }

نصيحة

يمكنك استخدام pnpm import لتحويل package-lock.json إلى pnpm-lock.yaml تلقائياً!

أوامر pnpm المتقدمة

الأمر الوصف
pnpm store status عرض حالة مخزن الحزم
pnpm store prune حذف الحزم غير المستخدمة
pnpm outdated عرض الحزم القديمة
pnpm why <package> معرفة لماذا تم تثبيت حزمة
pnpm audit فحص الثغرات الأمنية
pnpm dlx <package> تشغيل حزمة بدون تثبيت (مثل npx)

مثال: فحص المخزن:

# عرض معلومات المخزن pnpm store status # تنظيف الحزم غير المستخدمة لتوفير المساحة pnpm store prune

إعدادات pnpm

يمكنك تخصيص pnpm عبر ملف .npmrc في مجلد المشروع أو المجلد الرئيسي:

# .npmrc # حفظ التبعيات الدقيقة save-exact=true # استخدام shamefully-hoist للتوافق مع بعض المكتبات القديمة shamefully-hoist=true # تعطيل progress bar لسرعة أكبر progress=false # استخدام auto-install-peers auto-install-peers=true

shamefully-hoist

إذا واجهت مشاكل مع بعض المكتبات القديمة (مثل عدم إيجاد تبعيات)، جرب تفعيل shamefully-hoist=true. لكن هذا يقلل من فوائد pnpm الأمنية قليلاً.

الخلاصة

  • pnpm مدير حزم أسرع وأكفأ من npm
  • يوفر مساحة القرص بشكل كبير (حتى 70%)
  • يمكن تثبيته بسهولة باستخدام: volta install pnpm
  • متوافق تماماً مع أوامر npm
  • يوفر أماناً أعلى بمنع الوصول للتبعيات غير المصرح بها
  • مثالي للمشاريع الكبيرة والـ Monorepos