0Pricing
React Academy · درس

المكتبات المشتركة والحزم الداخلية

أنشئ مكتبات مشتركة لواجهة المستخدم والأدوات واستوردها عبر التطبيقات باستخدام أسماء مسارات TypeScript المستعارة.

المكتبات المشتركة والحزم الداخلية درس مجاني في React Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في React Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة React Academy 4 دروس في المجموع.

لماذا المكتبات المشتركة؟

بدلًا من تكرار المكوّنات وhooks والأدوات المساعدة في تطبيقات متعددة، استخرجها إلى مشاريع مكتبات مشتركة يمكن لأي تطبيق في المستودع الأحادي استخدامها.

إنشاء مكتبة

استخدم مولّدات Nx لإنشاء مشاريع مكتبات مكتوبة الأنواع وقابلة للبناء.

# UI component library:
npx nx generate @nx/react:library ui --directory=libs/ui --importPath=@myorg/ui

# Utility library:
npx nx generate @nx/js:library utils --directory=libs/utils --importPath=@myorg/utils

# Data access library (hooks, API calls):
npx nx generate @nx/react:library data-access --importPath=@myorg/data-access

واجهة المكتبة العامة

صدّر كل شيء من ملف index.ts واحد (وهو الواجهة العامة). ينبغي للمستهلكين الاستيراد من @myorg/ui فقط، وليس من المسارات الداخلية المتشعبة.

// libs/ui/src/index.ts
export { Button } from './lib/Button';
export { Card } from './lib/Card';
export { Input } from './lib/Input';
export type { ButtonProps } from './lib/Button';

// Consumer in apps/web:
import { Button, Card } from '@myorg/ui';
// NOT: import { Button } from '@myorg/ui/src/lib/Button'; // internal path

أنواع المكتبات: القابلة للنشر والقابلة للبناء

تُجمَّع المكتبات القابلة للبناء بصورة تدريجية لتسريع عمليات البناء في المستودع الأحادي. كما تنشئ المكتبات القابلة للنشر حزمة متوافقة مع npm لاستخدامها خارج المشروع.

# Buildable (monorepo internal use only):
npx nx generate @nx/react:library ui --buildable

# Publishable (for npm too):
npx nx generate @nx/react:library ui --publishable --importPath=@myorg/ui

فرض حدود الوحدات

استخدم قاعدة ESLint ‏@nx/enforce-module-boundaries لمنع التبعيات الدائرية وتقييد المشاريع التي يمكنها استيراد بعضها بعضًا.

// nx.json or .eslintrc
"depConstraints": [
  // Apps can only import from libs:
  { "sourceTag": "type:app", "onlyDependOnLibsWithTags": ["type:lib"] },
  // Feature libs can't import other feature libs (via shared libs only):
  { "sourceTag": "type:feature", "notDependOnLibsWithTags": ["type:feature"] }
]

Storybook للمكتبات المشتركة

شغّل Storybook على مكتبة واجهة المستخدم لتوثيق المكوّنات بمعزل عن أي تطبيق.

# Generate Storybook config for the ui lib:
npx nx generate @nx/storybook:configuration ui

# Run Storybook:
npx nx storybook ui

اختبار المكتبات

لكل مكتبة هدف اختبار خاص بها. شغّل اختبارات المكتبة وجميع التطبيقات المتأثرة عند تغيير المكتبة.

# Test specific library:
npx nx test ui

# Test all affected by a change:
npx nx affected --target=test

إدارة الإصدارات في المستودعات الأحادية

في المستودع الأحادي، تشترك جميع الحزم في ملف package.json واحد وفي إصدار واحد. أما المكتبات القابلة للنشر، فاستخدم أدوات مثل @jscutlery/semver أو Changesets لإدارة إصدارات مستقلة.

ترحيل الشيفرة الحالية إلى مكتبات

انقل الشيفرة المشتركة إلى مكتبة تدريجيًا: أنشئ المكتبة، وانقل الملفات، وحدّث عبارات الاستيراد، ودع الأسماء المستعارة لمسارات TypeScript تتولى الباقي.

# Move a component:
# 1. Copy src/components/Button.tsx → libs/ui/src/lib/Button.tsx
# 2. Export from libs/ui/src/index.ts
# 3. Update imports across apps from relative paths to '@myorg/ui'
# 4. Delete the original file

التوثيق باستخدام Compodoc أو Storybook Docs

استخدم وسم autodocs في Storybook أو Compodoc لإنشاء توثيق لواجهة API من أنواع TypeScript وتعليقات JSDoc الموجودة في ملفات المكتبة.

تحقق سريع

ما نقطة الدخول الوحيدة التي ينبغي للمستهلكين استخدامها عند الاستيراد من مكتبة Nx مشتركة؟

مراجعة

أنشئ المكتبات باستخدام nx generate، وصدّر كل شيء من ملف index.ts واحد، وطبّق حدود الوحدات باستخدام قواعد ESLint. استخدم المكتبات القابلة للبناء لتسريع عمليات البناء التدريجية، والمكتبات القابلة للنشر عندما تحتاج إلى إصدارها على npm. شغّل Storybook على مكتبات واجهة المستخدم لتوثيقها بمعزل.

الأسئلة الشائعة

هل درس «المكتبات المشتركة والحزم الداخلية» مجاني؟

نعم — نص درس «المكتبات المشتركة والحزم الداخلية» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة React Academy، انتقل إلى CoddyKit PRO. تتضمن دورة React Academy 4 دروس في المجموع.

ماذا ستتعلم في «المكتبات المشتركة والحزم الداخلية»؟

أنشئ مكتبات مشتركة لواجهة المستخدم والأدوات واستوردها عبر التطبيقات باستخدام أسماء مسارات TypeScript المستعارة. تتمرن على React Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ React Academy؟

لا تُشترط خبرة سابقة. React Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.

كم من الوقت يستغرق درس «المكتبات المشتركة والحزم الداخلية»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس React Academy هذا؟

نعم. كل درس في React Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. إنشاء Nx Monorepo باستخدام تطبيقات React
  2. المكتبات المشتركة والحزم الداخلية
  3. أوامر Nx Affected والتخزين المؤقت
  4. مولدات التعليمات البرمجية وأتمتة مساحة العمل
← العودة إلى React Academy