الاختيار · فصل ٤

إمتى تستخدم أنهي حزمة

devDependencies · typecheck · build · start · CI
🎯 الهدف: تحط typescript وtsx كل واحدة في الأمر اللي يليق بيها، ومتستبدلش فحص الأنواع بالتشغيل.

مش اختيار واحد

الحزمتين مش بديل لبعض. الشغل المعتاد يجمعهم:

عايز إيهالأمرالحزمة
تشغّل وأنت بتكتبtsx watch src/main.tstsx
تتأكد إن الأنواع سليمةtsc --noEmittypescript
تطلّع dist للسيرفرtsctypescript
تشغّل الناتج في productionnode dist/main.jsNode بس
package.json
{  "scripts": {    "dev": "tsx watch src/main.ts",    "typecheck": "tsc --noEmit",    "build": "tsc",    "start": "node dist/main.js"  }}
dev يسرّع الكتابة. typecheck وbuild هما اللي بيمنعوا غلط الأنواع من ما يوصل للسيرفر.

فين تتحط الحزمة

  • الاتنين devDependencies لو الإنتاج بيشغّل dist بـ node.
  • tsx تبقى dependency عادية بس لو السيرفر نفسه بيشغّل ملفات .ts بأمر tsx. ده أثقل في أول تشغيل، وبرضه مش بيفحص أنواع.
  • الـ CI يشغّل typecheck حتى لو التطوير كله على tsx. محرر الكود بيعرض الغلط وانت بتكتب، بس ده مش خطوة في الـ pipeline.

إمتى متجيبش tsx

  • ملف .ts بأنواع بتتشال بس، وNode عندك بيشيلها لوحده: التشغيل ممكن من غير الحزمة. الفحص لسه محتاج tsc.
  • مكتبة هتتنشر: المستهلك عايز JavaScript وملفات .d.ts من tsc، مش أمر tsx.
  • واجهة React: المتصفح مش بيشغّل tsx. البناء هناك لـ Vite أو أداة تانية، وtsc --noEmit يفضل خطوة الفحص.

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

🧠 اختبر نفسك
١) مشروع Node بيتنشر منه مجلد dist. tsx تتحط dependency عادية؟
لأ. خليها devDependency. الإنتاج يشغّل node dist/main.js.
٢) الـ dev شغال بـ tsx ومفيش أخطاء في الطرفية. الأنواع مضمونة؟
لأ. لازم tsc --noEmit في التطوير أو في الـ CI.
٣) مكتبة TypeScript هتتنزل عند الناس. تكتفي بـ tsx؟
لأ. انشر JavaScript وملفات الأنواع اللي tsc بيطلّعها.