Zum Inhalt springen

NextPDF Backport Builder installieren

Build-Werkzeug – KEINE Laufzeitabhängigkeit. Der Builder wird auf einer Maintainer-Workstation oder einem CI-Runner installiert. Eine nachgelagerte Anwendung installiert niemals den Builder, sondern das Paket, das der Builder erzeugt.

Zwei unterschiedliche Zielgruppen installieren unterschiedliche Komponenten:

  • Ein Maintainer oder CI-Operator klont dieses Repository und installiert die zugehörigen Build-Abhängigkeiten. Nur in diesem Kontext wird nextpdf/backport-builder installiert.
  • Eine nachgelagerte Anwendung auf einer älteren PHP-Laufzeit installiert das erzeugte Paket nextpdf/backport aus dem zugehörigen Release-Kanal. Die Anwendung greift niemals direkt auf dieses Repository zu.

Diese Seite behandelt beide Fälle. Lesen Sie den Abschnitt, der zu Ihrer Rolle passt.

AbhängigkeitBeschränkungMaßgebliche Quelle
PHP>=8.4 <9.0composer.jsonrequire.php
Composer2.6+Umgebungstabelle in CONTRIBUTING.md
rector/rector^2.0composer.jsonrequire-dev
phpstan/phpstan^2.1composer.jsonrequire-dev
phpunit/phpunit^13.0composer.jsonrequire-dev

Der Continuous-Integration-Workflow stellt PHP 8.5 sowohl für den Build- als auch für den Dry-Run-Job bereit. Ein Build-Host mit jeder PHP-Version im Bereich >=8.4 <9.0 erfüllt die Composer-Beschränkung. Der Parser muss die neueste Syntax akzeptieren, die im Quellcode verwendet wird. Verifiziert anhand von .github/workflows/0-ci.yml.

  1. Klonen Sie das Repository und checken Sie den Branch für das Ziel aus, das Sie bauen möchten. PHP74 ist der Standard-Branch; er erzeugt die Distribution für PHP 7.4 ausschließlich mit dem Kern. PHP81 erzeugt die Distribution für PHP 8.1 mit allen Adaptern.

    Terminal-Fenster
    git clone https://github.com/nextpdf-labs/backport.git
    cd backport
    git checkout PHP74
  2. Installieren Sie die Build-Abhängigkeiten. Verwenden Sie nicht --no-dev: Die Rector-Engine, PHPStan und PHPUnit liegen in require-dev, und der Build kann ohne sie nicht ausgeführt werden.

    Terminal-Fenster
    composer install --prefer-dist --no-progress
  3. Prüfen Sie, ob sich die Toolchain korrekt auflösen lässt. Das Skript analyse führt PHPStan auf Level 10 für rector/rules und scripts aus. Ein sauberer Durchlauf bestätigt, dass der Build-Code selbst solide ist, bevor Sie eine Ausgabe erzeugen.

    Terminal-Fenster
    composer analyse
  4. Führen Sie die Fixture-Tests der Regeln aus. Jede benutzerdefinierte Rector-Regel verfügt über eine Fixture-Suite, die die exakte before/after-Transformation prüft.

    Terminal-Fenster
    composer test

Nach Schritt 4 ist der Host bereit für den Build. Fahren Sie mit /integrations/backport/quickstart/ fort, um die Dry-Run- und Full-Build-Aufrufe kennenzulernen.

Der Build führt mehrere Quell-Repositorys zu einem Baum zusammen. Das Merge-Skript erwartet sie als Geschwisterverzeichnisse unter einem einzigen Quellstamm und adressiert sie über ihren Namen. Für das Ziel PHP 8.1 liest es nextpdf (Kern), nextpdf-Artisan, nextpdf-compat-legacy, nextpdf-Laravel, nextpdf-Symfony, nextpdf-CodeIgniter und nextpdf-Pro, wenn Pro einbezogen ist. Für das Ziel PHP 7.4 liest es nur nextpdf. Verifiziert anhand von scripts/merge-sources.php (MergeSources::__construct()). Geben Sie den Quellstamm mit --source-dir an. Siehe /integrations/backport/configuration/ für die Flag-Referenz.

Nutzung des erzeugten Pakets durch nachgelagerte Projekte

Abschnitt betitelt „Nutzung des erzeugten Pakets durch nachgelagerte Projekte“

Ein Projekt auf einer älteren PHP-Laufzeit installiert die erzeugte Distribution, nicht diesen Builder.

Terminal-Fenster
composer require nextpdf/backport

Das installierte Paket deklariert die Beschränkung >=8.1 <8.5 und ersetzt nextpdf/core, nextpdf/artisan, nextpdf/laravel, nextpdf/symfony, nextpdf/codeigniter und nextpdf/compat-legacy. Der Anwendungscode verwendet weiterhin unverändert den Namespace NextPDF\. Das Paket lädt den zusammengeführten Baum automatisch über das einzige PSR-4-Präfix NextPDF\, das auf src/ abgebildet ist. Ein PSR-4-Autoloader hängt den relativen Klassennamen an ein Basisverzeichnis an, das für das Präfix registriert ist (PHP-FIG PSR-4). Verifiziert anhand von scripts/adjust-composer.php (buildPublicAutoloadMap(), buildReplace()).

Terminal-Fenster
composer require nextpdf/backport

Die Distribution für PHP 7.4 enthält nur den Kern. Sie deklariert die Beschränkung >=7.4 <8.1 und ersetzt nur nextpdf/core. Framework-Adapter, die tcpdf-Kompatibilitätsschicht und Pro sind nicht Teil der Distribution für PHP 7.4. Verifiziert anhand von scripts/adjust-composer.php und scripts/build.php (das Ziel PHP 7.4 erzwingt ausschließlich den Kern). Ein Projekt, das einen Framework-Adapter benötigt, muss PHP 8.1 oder neuer verwenden.

Terminal-Fenster
composer require nextpdf/backport-pro

Die Pro-Distribution ist ein separates Paket, nextpdf/backport-pro, unter einer proprietary-Lizenz. Sie erfordert nextpdf/backport in der passenden major.minor und fügt phpseclib/phpseclib ^3.0 hinzu. Sie wird nur für das Ziel PHP 8.1 erzeugt. Verifiziert anhand von scripts/adjust-composer.php (generateProComposer()).

Die Distribution für PHP 7.4 und die Pro-Distribution schließen sich gegenseitig aus: Aufgrund der Konstruktion des Build-Skripts gibt es keinen Pro-Build für PHP 7.4.

Die generierte composer.json erfordert symfony/polyfill-*-Pakete, damit neuere Funktionen der Standardbibliothek auf der Ziellaufzeit aufgelöst werden. Das Ziel PHP 8.1 erfordert Polyfills für PHP 8.2 bis 8.5. Das Ziel PHP 7.4 erfordert zusätzlich die Polyfills für PHP 8.0 und 8.1. Es handelt sich um Laufzeitabhängigkeiten des erzeugten Pakets, nicht des Builders. Verifiziert anhand von scripts/adjust-composer.php (generatePublicComposer()).

  • /integrations/backport/configuration/ – Rector-Konfigurationen, benutzerdefinierte Regeln und die Referenz der Build-Flags.
  • /integrations/backport/quickstart/ – erster Dry-Run und vollständiger Build.