0Pricing
React Academy · درس

التجميع باستخدام Rollup وtsup للمكتبات

اضبط Rollup أو tsup لتجميع مكوّنات React مع الإخراج الخارجي الصحيح لـ React وReactDOM

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

لماذا لا نستخدم Vite للمكتبات

الإعداد الافتراضي لـ Vite مُحسّن للتطبيقات؛ فهو يجمع كل شيء، ويتعامل مع الأصول، وينشئ index.html. أما مكتبة المكوّنات فتحتاج إلى مخرجات مختلفة: ملفات JavaScript بصيغة ESM/CJS خالصة، دون تكلفة إضافية وقت التشغيل، ودون تضمين React، مع تعريفات TypeScript مناسبة. يعمل وضع المكتبات في Vite، لكن Rollup وtsup مصممان لهذا الغرض بدرجة أكبر.

Rollup: المعيار للمكتبات

ظل Rollup أداة التجميع القياسية لمكتبات JavaScript لسنوات. فهو ينتج مخرجات نظيفة وفعالة مع إمكانات ممتازة لحذف الشيفرة غير المستخدمة، ويدعم صيغتي مخرجات ESM وCJS. ويزيل رفع النطاق في Rollup تكلفة أغلفة الوحدات، منتجًا حزم مكتبة بأصغر حجم ممكن.

tsup: البديل عديم الإعدادات

tsup أداة تجميع TypeScript عديمة الإعدادات، ومدعومة بواسطة esbuild. وهي أسرع بكثير من Rollup؛ إذ يترجم esbuild خلال ميكروثوانٍ بدلًا من ميلي ثانية. وينتج الإعداد الأدنى: { entry: ['src/index.ts'], format: ['esm', 'cjs'], dts: true } صيغتي الوحدات وتعريفات TypeScript تلقائيًا.

خيارات الإعداد الأساسية في tsup

خيارات tsup الأساسية هي: entry، وهي مصفوفة ملفات نقاط الدخول. وformat، التي تحدد صيغ المخرجات: ['esm', 'cjs']. وdts: true، التي تنشئ ملفات تعريف TypeScript بصيغة .d.ts إلى جانب مخرجات JS. وtarget، التي تحدد الحد الأدنى لبيئة JavaScript، مثل esnext أو es2020. وsplitting: false، التي تُبقي المخرجات في ملفات مفردة.

مفاضلات esbuild وRollup

يُجمّع esbuild (عبر tsup) أسرع من Rollup بمقدار يتراوح بين 10 و100 مرة. ينتج Rollup مخرجات محسّنة بدرجة أكبر قليلًا، مع دقة أفضل في tree-shaking وتحكم أكبر في حدود الأجزاء. بالنسبة إلى معظم مكتبات المكوّنات، تتفوق سرعة tsup أثناء التطوير. أما عند الحاجة إلى أقصى تحكم في tree-shaking أو عند إعدادات الإدخال المتعددة المعقدة، فيُفضّل استخدام Rollup.

تحديد React كاعتمادية خارجية

أهم إعداد لأداة التجميع في مكتبة React هو: لا تُضمّن React أو ReactDOM في الحزمة مطلقًا. حددهما كاعتماديتين خارجيتين لاستبعادهما من مخرجاتك. إذا ضمّنت مكتبتك React، فسينتهي الأمر بالمستخدمين إلى نسختين من React — واحدة من حزمتك وأخرى من تطبيقهم. وهذا يعطّل جميع React Hooks بسبب وجود مثيلات متعددة من React.

ضبط الاعتماديات الخارجية في tsup

في إعدادات tsup، استخدم الخيار external: external: ['react', 'react-dom']. وفي إعدادات Rollup، عيّن external: ['react', 'react-dom', 'react/jsx-runtime']. أدرج react/jsx-runtime إذا كانت مكتبتك تستخدم JSX Transform. واجعل أي اعتماديات نظيرة أخرى تعلنها مكتبتك خارجية أيضًا.

إضافات Rollup لـ TypeScript

يتطلب إعداد Rollup الأدنى لمكتبة TypeScript ثلاث إضافات: @rollup/plugin-typescript لترجمة TypeScript، و@rollup/plugin-node-resolve لحل الاستيرادات من node_modules، و@rollup/plugin-commonjs لتحويل الاعتماديات بصيغة CommonJS إلى ESM ضمن الحزمة. أضف rollup-plugin-dts لملفات التصريحات.

بنية مجلد الإخراج

إخراج نموذجي لمكتبة بصيغتين: dist/esm/index.js وdist/esm/index.d.ts لمستخدمي ESM، وdist/cjs/index.js وdist/cjs/index.cjs لمستخدمي CJS. يربط حقل exports في package.json هذه المسارات بالبيئات الصحيحة. وتوضع ملفات تصريحات TypeScript بجوار ملفات JavaScript المناظرة لها.

نقاط دخول متعددة

تستفيد المكتبات الكبيرة من نقاط دخول متعددة، بحيث يستورد المستخدمون ما يحتاجون إليه فقط. مثال: entry: ['src/index.ts', 'src/utils.ts', 'src/hooks.ts']. يحصل كل إدخال على ملفات إخراج خاصة به. ويربط حقل exports في package.json كل مسار عام بمخرجاته: './utils' → './dist/utils.js'.

سكربت البناء في package.json

أضف أمر البناء إلى scripts في package.json: "build": "tsup". يقرأ tsup إعداداته من tsup.config.ts في المجلد الجذر. وينبغي أن يشغّل سكربت prepublish عملية البناء: إذ يضمن "prepublishOnly": "npm run build" بناء حزمتك دائمًا قبل نشرها إلى npm.

React كاعتمادية خارجية في حزمة المكتبة

لماذا يجب تحديد React كاعتمادية خارجية عند تجميع مكتبة مكوّنات React؟

مراجعة الدرس: تجميع المكتبة

يوفر tsup (المدعوم من esbuild) تجميعًا سريعًا دون إعدادات تقريبًا، باستخدام format: ['esm', 'cjs'] وdts: true. ويوفر Rollup تحكمًا أدق في tree-shaking باستخدام @rollup/plugin-typescript. القاعدة الأساسية: حدّد دائمًا react وreact-dom وجميع الاعتماديات النظيرة كاعتماديات خارجية لمنع تضمينها في الحزمة. أخرج الملفات إلى dist/esm/ وdist/cjs/ مع تصريحات TypeScript موازية. وتتيح نقاط الدخول المتعددة للمستخدمين tree-shaking أكثر دقة.

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

هل درس «التجميع باستخدام Rollup وtsup للمكتبات» مجاني؟

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

ماذا ستتعلم في «التجميع باستخدام Rollup وtsup للمكتبات»؟

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

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

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

كم من الوقت يستغرق درس «التجميع باستخدام Rollup وtsup للمكتبات»؟

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

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

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

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

  1. التجميع باستخدام Rollup وtsup للمكتبات
  2. مخرجات الحزم المزدوجة ESM وCJS
  3. التبعيات النظيرة وTree Shaking
  4. النشر إلى npm والإصدارات الدلالية
← العودة إلى React Academy