تخطَّ إلى المحتوى

تثبيت أداة بناء النقل الخلفي الخاصة بـ NextPDF

ثبّت أدوات البناء هذه على محطة عمل المشرف أو على مشغّل تكامل مستمر (⁨CI⁩). فهذه الأدوات ليست تبعية لوقت التشغيل. لا يثبّت التطبيق التابع أداة البناء أبدًا؛ بل يثبّت الحزمة التي تنتجها أداة البناء.

تحتاج جهتان مختلفتان إلى تثبيت أشياء مختلفة:

  • يستنسخ المشرف أو مشغّل ⁨CI⁩ هذا المستودع ويثبّت تبعيات البناء الخاصة به. ثبّت nextpdf/backport-builder في هذا السياق فقط.
  • يثبّت التطبيق التابع الذي يعمل بوقت تشغيل ⁨PHP⁩ أقدم حزمة nextpdf/backport المولَّدة من قناة الإصدار الخاصة بها. ولا يتعامل مع هذا المستودع أبدًا.

تغطّي هذه الصفحة سيرَي العمل كليهما. اقرأ القسم الذي يطابق دورك.

التبعيةالقيدالمصدر المرجعي
⁨PHP⁩>=8.4 <9.0composer.jsonrequire.php
⁨Composer⁩2.6+جدول البيئة في CONTRIBUTING.md
rector/rector^2.0composer.jsonrequire-dev
phpstan/phpstan^2.1composer.jsonrequire-dev
phpunit/phpunit^13.0composer.jsonrequire-dev

يستخدم سير عمل ⁨CI⁩ الإصدار ⁨PHP 8.5⁩ لكل من مهمة البناء ومهمة التشغيل التجريبي. أي مضيف بناء يشغّل إصدار ⁨PHP⁩ ضمن >=8.4 <9.0 يفي بقيد ⁨Composer.⁩ يجب أن يقبل مُحلِّل ⁨PHP⁩ أحدث صيغة يستخدمها المصدر. مُتحقَّق منه مقابل .github/workflows/0-ci.yml.

  1. استنسخ المستودع، ثم اسحب الفرع الخاص بالهدف الذي تريد بناءه. PHP74 هو الفرع الافتراضي، وينتج توزيعة ⁨PHP 7.4⁩ التي تقتصر على النواة. ينتج PHP81 توزيعة ⁨PHP 8.1⁩ مع جميع المحوّلات.

    Terminal window
    git clone https://github.com/nextpdf-labs/backport.git
    cd backport
    git checkout PHP74
  2. ثبّت تبعيات البناء. لا تمرّر --no-dev: فمحرّك ⁨Rector⁩ و⁨PHPStan⁩ و⁨PHPUnit⁩ موجودة في require-dev، ولا يمكن تشغيل البناء من دونها.

    Terminal window
    composer install --prefer-dist --no-progress
  3. تأكّد من أن سلسلة الأدوات تُحَلّ بنجاح. يشغّل البرنامج النصي analyse أداة ⁨PHPStan⁩ عند المستوى 10 على rector/rules وscripts. يبيّن التشغيل النظيف أن شيفرة البناء نفسها سليمة قبل إنتاج المخرجات.

    Terminal window
    composer analyse
  4. شغّل اختبارات تثبيتات القواعد. لكل قاعدة ⁨Rector⁩ مخصّصة مجموعة تثبيتات تتحقّق بدقة من تحويل ⁨before/after⁩.

    Terminal window
    composer test

بعد الخطوة 4، يصبح المضيف جاهزًا للبناء. انتقل إلى /⁨integrations/backport/quickstart/⁩ للاطّلاع على استدعاءات التشغيل التجريبي والبناء الكامل.

التوقّعات المتعلّقة بشجرة المصدر

قسم بعنوان «التوقّعات المتعلّقة بشجرة المصدر»

يدمج البناء عدة مستودعات مصدر في شجرة واحدة. ضعها كأدلّة شقيقة ضمن جذر مصدر واحد؛ فبرنامج الدمج يتعامل مع كل دليل باسمه. بالنسبة إلى هدف ⁨PHP 8.1⁩، يقرأ nextpdf (النواة)، وnextpdf-Artisan، وnextpdf-compat-legacy، وnextpdf-Laravel، وnextpdf-Symfony، وnextpdf-CodeIgniter، وnextpdf-Pro عند تضمين ⁨Pro.⁩ بالنسبة إلى هدف ⁨PHP 7.4⁩، يقرأ nextpdf فقط. مُتحقَّق منه مقابل scripts/merge-sources.php (MergeSources::__construct()). حدّد جذر المصدر باستخدام --source-dir. راجع /⁨integrations/backport/configuration/⁩ للاطّلاع على مرجع الرايات.

الاستهلاك التابع للحزمة المُنتَجة

قسم بعنوان «الاستهلاك التابع للحزمة المُنتَجة»

عندما تدعم مشروعًا يعمل بوقت تشغيل ⁨PHP⁩ أقدم، ثبّت التوزيعة المُنتَجة، لا أداة البناء هذه.

Terminal window
composer require nextpdf/backport

تُعلن الحزمة المثبَّتة القيد >=8.1 <8.5 وتحلّ محلّ nextpdf/core، وnextpdf/artisan، وnextpdf/laravel، وnextpdf/symfony، وnextpdf/codeigniter، وnextpdf/compat-legacy. تستمر شيفرة التطبيق في استيراد مساحة الأسماء NextPDF\ دون تغيير. تحمّل الحزمة الشجرة المدموجة تلقائيًا عبر بادئة ⁨PHP Standard Recommendation 4⁩ (⁨PSR-4⁩) الوحيدة NextPDF\ المربوطة بـ src/. يُلحق محمّل ⁨PSR-4⁩ التلقائي اسم الفئة النسبي بدليل أساس مسجَّل للبادئة (⁨PHP-FIG PSR-4⁩). مُتحقَّق منه مقابل scripts/adjust-composer.php (buildPublicAutoloadMap()، buildReplace()).

Terminal window
composer require nextpdf/backport

تقتصر توزيعة ⁨PHP 7.4⁩ على النواة فقط. تُعلن القيد >=7.4 <8.1 وتحلّ محلّ nextpdf/core فقط. لا تتضمّن توزيعة ⁨PHP 7.4⁩ محوّلات أطر العمل، ولا طبقة التوافق مع ⁨tcpdf⁩، ولا ⁨Pro.⁩ مُتحقَّق منه مقابل scripts/adjust-composer.php وscripts/build.php (هدف ⁨PHP 7.4⁩ يفرض الاقتصار على النواة). يحتاج المشروع الذي يتطلّب محوّل إطار عمل إلى ⁨PHP 8.1⁩ أو أحدث.

Terminal window
composer require nextpdf/backport-pro

توزيعة ⁨Pro⁩ حزمة منفصلة، nextpdf/backport-pro، بترخيص proprietary. تتطلّب nextpdf/backport عند ⁨major.minor⁩ المطابق، وتضيف phpseclib/phpseclib ^3.0. لا تُنتَج إلا لهدف ⁨PHP 8.1.⁩ مُتحقَّق منه مقابل scripts/adjust-composer.php (generateProComposer()).

توزيعة ⁨PHP 7.4⁩ وتوزيعة ⁨Pro⁩ متعارضتان: فبحكم بنية البرنامج النصي للبناء، لا يوجد بناء ⁨Pro⁩ لـ ⁨PHP 7.4.⁩

حشوات التوافق (⁨polyfills⁩) في الحزمة المُنتَجة

قسم بعنوان «حشوات التوافق (⁨polyfills⁩) في الحزمة المُنتَجة»

يتطلّب ملف composer.json المولَّد حزم symfony/polyfill-* حتى تتمكّن دوال المكتبة القياسية الأحدث من التحلّل في وقت التشغيل الهدف. يتطلّب هدف ⁨PHP 8.1⁩ حشوات توافق لـ ⁨PHP 8.2⁩ حتى 8.5. ويتطلّب هدف ⁨PHP 7.4⁩ أيضًا حشوتي التوافق لـ ⁨PHP 8.0⁩ و8.1. هذه تبعيات وقت تشغيل للحزمة المُنتَجة، وليست تبعيات أداة البناء. مُتحقَّق منه مقابل scripts/adjust-composer.php (generatePublicComposer()).

  • /⁨integrations/backport/configuration/⁩ — تهيئة ⁨Rector⁩ والقواعد المخصّصة ومرجع رايات البناء.
  • /⁨integrations/backport/quickstart/⁩ — أول تشغيل تجريبي وبناء كامل لك.