البداية · فصل ١

تلات حاجات مش حاجة واحدة

Node · package manager · dependencies · lockfile
🎯 الهدف: تفرّق بين Node ومدير الحزم والحزم نفسها، وتفهم ليه قفل dependencies مش قفل للأداة.

مين بيعمل إيه؟

لما تقول: “مشروعي بـ npm”، فيه ٣ طبقات منفصلة:

١ — Node

هو الـ runtime اللي يشغّل JavaScript. رقمه زي 22.20.0. مش هو npm.

٢ — package manager

npm أو Yarn أو pnpm. يقرأ الوصفة، يحل شجرة الحزم، ويكتب الـ lockfile و node_modules.

٣ — dependencies

React وExpress وباقي الحزم. نسخها موجودة في package.json، والتفاصيل الدقيقة للشجرة في lockfile.

طالما الحزم مقفولة، نسخة npm تفرق ليه؟

الـ lockfile يقفل ناتج حل الحزم، لكنه مش بيقفل البرنامج اللي هيقرأ الناتج. إصدار مختلف من npm أو pnpm ممكن يختلف في:

  • صيغة الـ lockfile، وهل يعيد كتابته.
  • قواعد peerDependencies و optionalDependencies.
  • شكل node_modules والـ linking.
  • تشغيل lifecycle scripts والتحذيرات والسياسات.
  • قبول lockfile قديم أو اعتباره محتاج تحديث.

وكمان npm install و pnpm install العاديين مسموح لهم يصلحوا أو يحدّثوا القفل. التثبيت القابل للتكرار يحتاج ٣ حاجات مع بعض:

مدير + نسخة ثابتينlockfile داخل Gitfrozen install في CI
terminal
# npmnpm ci# pnpmpnpm install --frozen-lockfile
الـ lockfile يقفل شجرة الحزم. Corepack يقفل الأداة اللي تقرأ الشجرة.

Corepack مكانه فين؟

Corepack مش runtime ومش package manager. هو launcher صغير يقف قبل مدير الحزم:

لو المشروع كاتب pnpm@10.15.0، Corepack يجهّز ويشغّل الرقم ده. لو كتبت Yarn، يرفض. لو مفيش اتفاق مكتوب، مفيش ضمان إن أفراد الفريق شغّالين بنفس الأداة.

خلّصت الفصل لما

🧠 اختبر نفسك
١) مين بيشغّل JavaScript: Node ولا pnpm؟
Node. pnpm بيدير dependencies.
٢) الـ lockfile قفل إيه، ومقفلش إيه؟
قفل شجرة الحزم الدقيقة. مقفلش نسخة الأداة اللي تقراه.
٣) Corepack ينزّل Express ولا pnpm؟
يجهّز نسخة pnpm المطلوبة؛ pnpm هو اللي ينزّل Express.