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

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

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

ابدأ الدورة

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

مع نمو المشروع وظهور منطق مشترك يجب إعادة استخدامه في أجزاء مختلفة من التطبيق، يواجه المطورون مشكلة تنظيم الكود. يبدأ الكثيرون في نسخ الملفات، أو إنشاء حزم npm منفصلة، أو وحدات معقدة. حل هذه المشكلة هو المستودع الواحد (monorepo). في هذه المقالة، سنشرح ما هو المستودع الواحد، ولماذا هو ضروري في نظام JavaScript البيئي (Node.js)، وكيفية إعداده باستخدام الأدوات الشائعة. المقالة موجهة للمطورين المبتدئين الذين هم على دراية بأساسيات Node.js و npm.



ما هو المستودع الواحد ولماذا هو ضروري؟

المستودع الواحد هو نهج لتنظيم الكود يتم فيه تخزين جميع المشاريع والمكتبات والخدمات في مستودع واحد (على سبيل المثال، على GitHub). على عكس المستودعات المتعددة (multirepo)، حيث يكون لكل مشروع مستودعه الخاص، يجمع المستودع الواحد كل شيء في مكان واحد.

المزايا الرئيسية:

  • التحكم الموحد في الإصدارات: من الأسهل إدارة التغييرات التي تؤثر على حزم متعددة.
  • إعادة استخدام الكود: الأدوات المساعدة والأنواع والتكوينات المشتركة تكون قريبة ولا تتطلب النشر في npm.
  • تبسيط إعادة الهيكلة: يتم اختبار التغييرات في حزمة واحدة تلقائيًا مع الحزم الأخرى.
  • بناء واختبار موحد: يمكن تشغيل الاختبارات لجميع الحزم بأمر واحد.

ومع ذلك، فإن للمستودع الواحد عيوبًا أيضًا: فقد يصبح كبيرًا جدًا، وقد تصبح إدارة التبعيات معقدة. لحل هذه المشكلات، توجد أدوات خاصة.



أدوات العمل مع المستودع الواحد في JavaScript

في نظام Node.js البيئي، هناك العديد من الأدوات الشائعة لإدارة المستودع الواحد. سننظر في اثنتين من أكثرها شيوعًا: NPM Workspaces (المدمجة في npm) و Lerna.

NPM Workspaces

بدءًا من إصدار npm 7، ظهر دعم مدمج للمستودعات الواحدة من خلال workspaces. هذه طريقة بسيطة وسهلة لتنظيم الكود دون تثبيت حزم إضافية.

للتكوين، يكفي إنشاء ملف package.json جذري وتحديد المجلدات التي تحتوي على الحزم فيه:

// package.json (جذري){  "name": "my-monorepo",  "private": true,  "workspaces": [    "packages/*"  ]}

ثم قم بإنشاء هيكل المجلدات:

my-monorepo/├── package.json├── packages/│   ├── utils/│   │   ├── package.json│   │   └── index.js│   └── app/│       ├── package.json│       └── index.js

الآن، إذا كانت الحزمة app تعتمد على utils، يمكنك ببساطة تحديدها في التبعيات:

// packages/app/package.json{  "name": "@my/app",  "dependencies": {    "@my/utils": "*"  }}

بعد تنفيذ npm install في جذر المشروع، سيقوم npm بإنشاء روابط رمزية بين الحزم. هذا يعني أنه يمكنك تطوير كلتا الحزمتين في وقت واحد، وستكون التغييرات في utils متاحة فورًا في app.



Lerna

Lerna هي أداة أكثر قوة، وغالبًا ما تُستخدم مع NPM Workspaces أو Yarn Workspaces. تضيف إمكانيات لنشر الحزم، وإدارة الإصدارات، وتنفيذ الأوامر في جميع الحزم.

تثبيت Lerna:

npm install -g lerna

إنشاء التكوين:

lerna init

سيؤدي هذا إلى إنشاء ملف lerna.json وهيكل أساسي. مثال على التكوين:

// lerna.json{  "version": "0.0.0",  "packages": ["packages/*"],  "npmClient": "npm"}

تسمح Lerna بتشغيل الأوامر في جميع الحزم:

lerna run testlerna run build

وكذلك إدارة إصدارات الحزم

المدونات

توصيات الكتب