المشروع مينفعش يفترض الجهاز
وجود packageManager داخل Git مهم، لكنه مش بينزّل Corepack سحريًا. لو صاحبك معندوش Corepack، أو عنده pnpm عالمي يسبق الـ shim، ممكن الاتفاق ما يتطبقش.
الحل مش “كل واحد يظبط جهازه بطريقته”. اكتب onboarding قصير يتكرر في الجهاز والـ CI:
git clone https://example.com/koshary-app.gitcd koshary-appnode --versionnpm install -g corepack@0.36.0corepack enablecorepack installpnpm --versionpnpm install --frozen-lockfilecorepack install يجهّز النسخة المكتوبة قبل أمر pnpm، فيفصل خطأ تنزيل المدير عن خطأ تنزيل dependencies. هو مفيد، لكن مش إلزامي كل مرة.
نفس الاتفاق في GitHub Actions
الـ CI جهاز جديد؛ دي ميزة، لأنه يكشف الافتراضات اللي على لابتوبك.
steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: 22 - run: npm install -g corepack@0.36.0 - run: corepack enable - run: corepack install - run: pnpm install --frozen-lockfile - run: pnpm testليه مثبتناش pnpm@latest عالميًا؟ لأن نسخة pnpm جاية من المشروع. وليه ثبّتنا Corepack برقم؟ لأننا عايزين launcher نفسه ثابت في الفريق والـ CI.
Lab: اكسر كل طبقة
اعمل مشروع تجريبي:
mkdir corepack-lab && cd corepack-labnpm init -ynpm install -g corepack@0.36.0corepack enablecorepack use pnpm@10.15.0pnpm --versionyarn installراجع إن package.json أخد packageManager ومعاه integrity hash، وإن yarn install وقع برسالة تقول إن المشروع بيستخدم pnpm.
بعدين جرّب:
corepack enable npmnpm installالمفروض npm يقع برضه. كده شفت الفرق بين حقل مكتوب، وshim موجود، وأمر فعلًا مرّ من خلاله.