هندسة المشاريع المعقدة مع الذكاء الاصطناعي
أنماط Monorepo مع مساعدة الذكاء الاصطناعي
5 دقيقة للقراءة
لماذا Monorepos للتطوير بمساعدة الذكاء الاصطناعي؟
Monorepos توفر لمساعدي الذكاء الاصطناعي مزايا حاسمة:
- سياق كامل: الذكاء الاصطناعي يمكنه رؤية جميع الحزم وعلاقاتها
- أنماط متسقة: التكوينات المشتركة تعني أسلوب كود متسق
- أمان الأنواع: أنواع مشتركة عبر الحزم
- تغييرات ذرية: تعديل حزم متعددة في commit واحد
هيكل Monorepo للذكاء الاصطناعي
تخطيط الدليل الأمثل
my-monorepo/
├── apps/
│ ├── web/ # واجهة Next.js
│ ├── api/ # خادم Node.js
│ └── admin/ # لوحة تحكم الإدارة
├── packages/
│ ├── ui/ # مكونات React المشتركة
│ ├── database/ # مخطط Prisma والعميل
│ ├── types/ # أنواع TypeScript المشتركة
│ ├── utils/ # الأدوات المشتركة
│ └── config/ # التكوينات المشتركة (ESLint, TS)
├── turbo.json
├── package.json
└── .claude/
└── context.md # توثيق سياق الذكاء الاصطناعي
ملف سياق الذكاء الاصطناعي
أنشئ ملف سياق يساعد الذكاء الاصطناعي على فهم monorepo الخاص بك:
<!-- .claude/context.md -->
# سياق Monorepo
## علاقات الحزم
- `apps/web` يعتمد على: `packages/ui`, `packages/types`, `packages/utils`
- `apps/api` يعتمد على: `packages/database`, `packages/types`, `packages/utils`
- `packages/ui` يعتمد على: `packages/types`
- `packages/database` يعتمد على: `packages/types`
## أوامر التطوير
- `pnpm dev` - تشغيل جميع التطبيقات
- `pnpm build` - بناء جميع الحزم
- `pnpm test` - تشغيل جميع الاختبارات
- `turbo run build --filter=web` - بناء تطبيق محدد
## إضافة مكونات جديدة
1. المكونات المشتركة تذهب في `packages/ui`
2. المكونات الخاصة بالتطبيق تذهب في `apps/[app]/components`
3. جميع المكونات يجب أن تُصدَّر من index.ts
## اتفاقيات الأنواع
- أنواع استجابة API في `packages/types/api.ts`
- نماذج قاعدة البيانات في `packages/types/models.ts`
- الأدوات المشتركة في `packages/types/utils.ts`
إنشاء الحزم بمساعدة الذكاء الاصطناعي
إنشاء حزمة مشتركة جديدة
claude "أنشئ حزمة مشتركة جديدة 'packages/email' لـ
إرسال رسائل البريد الإلكتروني المعاملاتية. ضمّن:
1. إعداد الحزمة مع tsconfig مناسب
2. تجريد خدمة البريد الإلكتروني
3. موفري SendGrid و Resend
4. تعريفات الأنواع
5. تكوين التصدير"
Claude Code يولد الحزمة الكاملة:
// packages/email/src/index.ts
export { EmailService } from './service';
export { SendGridProvider } from './providers/sendgrid';
export { ResendProvider } from './providers/resend';
export type { EmailProvider, EmailOptions, EmailResult } from './types';
// packages/email/src/types.ts
export interface EmailOptions {
to: string | string[];
subject: string;
html: string;
text?: string;
from?: string;
replyTo?: string;
}
export interface EmailResult {
success: boolean;
messageId?: string;
error?: string;
}
export interface EmailProvider {
send(options: EmailOptions): Promise<EmailResult>;
}
// packages/email/src/service.ts
import type { EmailProvider, EmailOptions, EmailResult } from './types';
export class EmailService {
constructor(private provider: EmailProvider) {}
async send(options: EmailOptions): Promise<EmailResult> {
return this.provider.send(options);
}
async sendBatch(emails: EmailOptions[]): Promise<EmailResult[]> {
return Promise.all(emails.map((email) => this.send(email)));
}
}
ربط الاعتماديات
claude "أضف حزمة email كاعتمادية لـ apps/api.
حدث رسم الاعتمادية في turbo.json إذا لزم الأمر."
إعادة الهيكلة عبر الحزم
السيناريو: إعادة تسمية نوع مشترك
claude "أعد تسمية نوع 'User' إلى 'UserProfile' عبر
monorepo بالكامل. حدث:
1. packages/types/models.ts (التعريف)
2. جميع الاستيرادات في apps/web
3. جميع الاستيرادات في apps/api
4. جميع الاستيرادات في packages/ui
تأكد من عدم وجود تغييرات معطلة."
Claude Code ينفذ إعادة هيكلة ذرية:
## ملخص إعادة الهيكلة
الملفات المعدلة: 24
- packages/types/src/models.ts (التعريف مُعاد تسميته)
- apps/web/src/components/UserCard.tsx
- apps/web/src/hooks/useUser.ts
- apps/api/src/routes/users.ts
- apps/api/src/services/auth.ts
- packages/ui/src/components/Avatar.tsx
... (18 ملف آخر)
جميع فحوصات ترجمة TypeScript تمر.
جميع الاختبارات تمر.
أنماط Turborepo المحددة
تكوين Pipeline للذكاء الاصطناعي
// turbo.json
{
"$schema": "https://turbo.build/schema.json",
"pipeline": {
"build": {
"dependsOn": ["^build"],
"outputs": ["dist/**", ".next/**"]
},
"test": {
"dependsOn": ["build"],
"outputs": []
},
"lint": {
"outputs": []
},
"typecheck": {
"dependsOn": ["^build"],
"outputs": []
}
}
}
تصحيح البناء بمساعدة الذكاء الاصطناعي
claude "بناء Turbo الخاص بنا يفشل بأخطاء اعتمادية دائرية.
حلل رسم الاعتمادية وأصلح المشكلة."
Claude Code يحقق:
## تحليل البناء
وُجد اعتمادية دائرية:
packages/utils ← packages/types ← packages/utils
السلسلة:
1. packages/utils يستورد formatDate من packages/types
2. packages/types يستورد ValidationError من packages/utils
الحل:
انقل ValidationError إلى packages/types/errors.ts
حدث الاستيرادات في packages/utils لاستخدام packages/types
جارٍ تنفيذ الإصلاح...
أنماط Nx المحددة
استخدام مولدات Nx مع الذكاء الاصطناعي
claude "استخدم Nx لتوليد مكتبة React جديدة للرسوم البيانية.
اضبطها مع إعداد Tailwind والاختبار الموجود."
# الذكاء الاصطناعي ينفذ
npx nx generate @nx/react:library charts \
--directory=packages/charts \
--style=tailwind \
--unitTestRunner=vitest \
--bundler=vite
تحليل المتأثرين
claude "ما الحزم التي ستتأثر إذا عدلت
packages/database/schema.prisma?"
# الذكاء الاصطناعي يشغل
npx nx affected:graph --base=main
# يُرجع
المشاريع المتأثرة:
- packages/database (معدل)
- packages/types (يعتمد على database)
- apps/api (يعتمد على database)
- apps/web (يعتمد على types)
- apps/admin (يعتمد على types, database)
العمليات على مستوى Workspace
التحديثات المجمعة
claude "حدث جميع الحزم لاستخدام logger الجديد من
packages/utils/logger بدلاً من console.log. طبق على:
- جميع التطبيقات
- جميع الحزم ما عدا utils نفسها
اتبع أنماط الاستيراد الموجودة."
مزامنة الاعتماديات
claude "تأكد أن جميع الحزم تستخدم نفس إصدار React.
تحقق من عدم تطابق الإصدارات وحدث ملفات package.json."
أفضل الممارسات لتطوير Monorepo بالذكاء الاصطناعي
- حافظ على تحديث ملفات السياق: صن
.claude/context.md - استخدم بروتوكولات Workspace:
"workspace:*"للاعتماديات الداخلية - أدوات متسقة: نفس الاختبار والفحص عبر الحزم
- حدود صريحة: مسؤوليات حزم واضحة
- فحوصات آلية: CI يتحقق من التغييرات عبر الحزم
ملخص الوحدة
لقد تعلمت كيف:
- تتخذ قرارات معمارية مدفوعة بالذكاء الاصطناعي
- تبني ميزات full-stack مع ذكاء اصطناعي منسق
- تدير تعقيد monorepo بمساعدة الذكاء الاصطناعي
بعد ذلك، سنتعامل مع إدارة قواعد الكود الكبيرة—العمل مع الذكاء الاصطناعي على قواعد كود بمئات الآلاف من الأسطر. :::