مستودع أحادي مع TypeScript: تنظيم الكود للمبتدئين

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

مستودع أحادي مع TypeScript: تنظيم الكود للمبتدئين



تطوير التطبيقات الحديثة باستخدام TypeScript غالباً ما يتطلب إدارة عدة حزم مترابطة (مثل مكتبة المكونات، خدمة الخلفية، والأدوات المساعدة). بدلاً من تخزين كل حزمة في مستودع منفصل (متعدد المستودعات)، تختار العديد من الفرق المستودع الأحادي — وهو مستودع واحد يحتوي على جميع المشاريع. في هذه المقالة، سنشرح كيفية تنظيم مستودع أحادي مع TypeScript، حتى لو كنت مبتدئاً.



ما هو المستودع الأحادي ولماذا هو مطلوب؟



المستودع الأحادي (monorepo) هو نهج يتم فيه تخزين كود عدة مشاريع (حزم، وحدات) في مستودع واحد. هذا لا يعني أن جميع المشاريع تندمج في كومة واحدة: فهي تبقى منفصلة منطقياً، ولكنها تحت سقف واحد.



مزايا لمشاريع TypeScript:

  • إصدار موحد للتبعيات. تتجنب الموقف حيث تستخدم حزم مختلفة إصدارات مختلفة من TypeScript أو نفس المكتبة.
  • إعادة هيكلة بسيطة. تغيير واجهة مشتركة أو نوع في مكان واحد يتم تحديثه فوراً في جميع الحزم التابعة.
  • نشر مبسط. أدوات المستودع الأحادي (مثل Lerna أو Nx) تساعد في نشر الحزم المعدلة فقط تلقائياً.
  • إعدادات مشتركة. يمكنك الحصول على ملف tsconfig.json واحد لجميع الحزم، مع إمكانية تجاوزه عند الحاجة.


أدوات إنشاء المستودع الأحادي



للعمل مع المستودع الأحادي في TypeScript، توجد عدة أدوات شائعة:

  • npm Workspaces — إمكانية مدمجة في npm بدءاً من الإصدار 7. بسيطة وفعالة.
  • Yarn Workspaces — وظيفة مماثلة في مدير الحزم Yarn.
  • Lerna — أداة كلاسيكية، تُستخدم غالباً فوق npm أو Yarn Workspaces.
  • Nx — نظام قوي للمستودعات الأحادية مع إمكانيات متقدمة للتخزين المؤقت وتوليد الكود.
  • Turborepo — أداة حديثة من Vercel، تركز على السرعة والبساطة.


في هذا الدليل، سنستخدم npm Workspaces، لأنه الطريقة الأبسط التي لا تتطلب تثبيت أدوات عالمية إضافية.



إعداد المستودع الأحادي خطوة بخطوة مع TypeScript



1. إنشاء الهيكل الجذري



ابدأ بإنشاء المجلد الجذر للمستودع الأحادي الخاص بك وتهيئة package.json:



mkdir my-monorepocd my-monoreponpm init -y


الآن قم بتعديل package.json الجذري، بإضافة حقل workspaces. هذا سيوجه npm إلى مكان البحث عن حزمك:



{  "name": "my-monorepo",  "private": true,  "workspaces": [    "packages/*"  ]}


العلامة "private": true تمنع النشر العرضي للحزمة الجذرية في npm.



2. إنشاء الحزم



أنشئ هيكل المجلدات لحزمك. الهيكل النموذجي يبدو كالتالي:



my-monorepo/├── packages/│   ├── utils/          # أدوات مساعدة عامة│   ├── ui/             # مكتبة المكونات│   └── backend/        # تطبيق الخادم├── package.json└── tsconfig.json


أنشئ مجلد packages وداخله مجلدات لكل حزمة. يجب أن تحتوي كل حزمة على package.json خاص بها. على سبيل المثال، للحزمة utils:



mkdir -p packages/utilscd packages/utilsnpm init -y


قم بتعديل packages/utils/package.json، بإضافة الاسم وربما الإصدار:



{  "name": "@my-project/utils",  "version": "1.0.0",  "main": "dist/index.js",  "types": "dist/index.                

المدونات

توصيات الكتب