التشغيل · فصل ٣

لما تكتب pnpm مين بيرد؟

PATH · shim · corepack enable · Node · npm
🎯 الهدف: تفهم رحلة الأمر من الـ shell للـ shim، وعلاقة Node بـ npm وCorepack.

pnpm ميعرفش Corepack

لما تكتب pnpm install، pnpm مش بيدور على Corepack. الـ shell يدور في PATH من الأول للآخر ويشغّل أول ملف اسمه pnpm.

بعد corepack enable، Corepack يحط ملف وسيط اسمه pnpm جنب تثبيت Node. لو الملف ده هو الأول في PATH، الرحلة تبقى:

لو pnpm عالمي قديم جاي قبله في PATH، القديم هو اللي يشتغل ومش هيعدّي على Corepack. افحص:

terminal
command -v pnpm       # Windows: where pnpmcorepack enablecommand -v pnpmpnpm --version
حقل packageManager مش زر تشغيل. لازم الأمر نفسه يعدّي على Corepack shim.

هل كل Node بينزل معاه npm؟

توزيعات Node الرسمية عادةً بتشحن npm معاها، لكنهم مشروعين وإصدارين منفصلين. إصدار Node يختار نسخة npm وقت نشره، وتقدر تحدّث npm منفصل:

terminal
node --versionnpm --versionnpm install -g npm@11

لما تغيّر Node بـ nvm مثلًا، أنت بتنتقل لتثبيت Node تاني وغالبًا معاه npm تاني. متفترضش إن تحديث npm حدّث Node، أو العكس.

Corepack قصة تالتة: اتوزع مع Node من ١٤٫١٩ لحد قبل ٢٥، لكنه مش مفعّل لمجرد وجوده. من Node ٢٥ اتشال من توزيعة Node. اعمل onboarding يتحمل الحالتين:

terminal
npm install -g corepack@0.36.0corepack enable

npm مش في التفعيل الافتراضي

corepack enable من غير أسماء يفعّل Yarn وpnpm. npm اللي جاي مع Node يفضل هو اللي يشتغل، وCorepack مش هيشوفه. يعني مشروع pnpm ممكن يرفض yarn install، لكن npm install يعدّي من الباب الجانبي.

عشان npm كمان يعدّي على نفس البوابة:

terminal
corepack enable npm

أو نادِه صراحةً: corepack npm install. الحالتان تخلي npm يمر على الفحص.

اقفلها لو خربت المسار

corepack disable يشيل الوسائط. corepack disable pnpm يشيل pnpm بس. مفيد لو فعّلت وpnpm بقى بيشير لمكان غلط، أو عايز ترجع للنسخة العامة مؤقتًا عشان تجرب.

على نظام الملفات للقراءة بس، enable يفشل لأنه مش قادر يكتب جنب node. الحل في الوثائق aliases في الشيل، زي alias pnpm="corepack pnpm". ده جهازك، مش اتفاق الفريق.

لو مش عايز تغيّر PATH

تقدر تنادي المدير صراحةً من خلال Corepack:

terminal
corepack pnpm@10.15.0 --versioncorepack pnpm install

السطر التاني لسه بيتحقق من حقل المشروع. corepack yarn install جوه مشروع pnpm يقع؛ النداء الصريح مش ثغرة.

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

🧠 اختبر نفسك
١) مين يقرر أنهي pnpm يشتغل أولًا؟
الـ shell حسب ترتيب PATH. المفروض الأول يكون Corepack shim.
٢) هل تحديث npm يحدث Node؟
لأ. npm مشروع وإصدار منفصلان، حتى لو توزيعة Node الرسمية بتشحن نسخة منه.
٣) ليه npm install ممكن يعدّي في مشروع pnpm؟
لأن npm shim مش مفعّل افتراضيًا. فعّله صراحةً أو استخدم حزامًا إضافيًا.