مين بيعمل إيه؟
لما تقول: “مشروعي بـ npm”، فيه ٣ طبقات منفصلة:
هو الـ runtime اللي يشغّل JavaScript. رقمه زي 22.20.0. مش هو npm.
npm أو Yarn أو pnpm. يقرأ الوصفة، يحل شجرة الحزم، ويكتب الـ lockfile و node_modules.
React وExpress وباقي الحزم. نسخها موجودة في package.json، والتفاصيل الدقيقة للشجرة في lockfile.
طالما الحزم مقفولة، نسخة npm تفرق ليه؟
الـ lockfile يقفل ناتج حل الحزم، لكنه مش بيقفل البرنامج اللي هيقرأ الناتج. إصدار مختلف من npm أو pnpm ممكن يختلف في:
- صيغة الـ lockfile، وهل يعيد كتابته.
- قواعد
peerDependenciesوoptionalDependencies. - شكل
node_modulesوالـ linking. - تشغيل lifecycle scripts والتحذيرات والسياسات.
- قبول lockfile قديم أو اعتباره محتاج تحديث.
وكمان npm install و pnpm install العاديين مسموح لهم يصلحوا أو يحدّثوا القفل. التثبيت القابل للتكرار يحتاج ٣ حاجات مع بعض:
# npmnpm ci# pnpmpnpm install --frozen-lockfileCorepack مكانه فين؟
Corepack مش runtime ومش package manager. هو launcher صغير يقف قبل مدير الحزم:
لو المشروع كاتب pnpm@10.15.0، Corepack يجهّز ويشغّل الرقم ده. لو كتبت Yarn، يرفض. لو مفيش اتفاق مكتوب، مفيش ضمان إن أفراد الفريق شغّالين بنفس الأداة.