2017-04-13 4 views
2

Ich habe ein GIT-Repository, das Releases erstellt, die über Composer heruntergeladen und installiert werden können.Composer Custom Release-Paket

Diese Releases erstellen derzeit einen Tarball, der das gesamte Repository enthält. Das Problem ist, dass das Repository riesig ist und ich nicht den gesamten Inhalt brauche.

Abgesehen davon gibt es einen Build-Prozess, der kompiliert, verschmilzt usw. und bietet ein Paket, das viel kleiner ist.

Ich möchte Archiv hochladen, das aus Build-Prozess stammt und dieses Paket als Download bereitstellen, wenn der Komponist danach fragt.

Wie die Dinge stehen sehe ich das nicht als eine Option. Selbst wenn ich den benutzerdefinierten archive.tar.gz-Composer hochlade, wird immer noch die originale Tarball-Datei heruntergeladen, die vom GIT-Tag kam (dieser riesige Tarball, der jede einzelne Datei enthält).

Gibt es eine Lösung für dieses Problem?

+0

Ich denke, dass [Package] (https://getcomposer.org/doc/05-repositories.md#package-2) ist das, was Sie suchen. –

Antwort

0

ich die Schaffung PHP-Klasse endete pre-package-install Ereignis nach Komponist geworfen zu handhaben .

<?php 

namespace Company\Composer; 

use Composer\Installer\PackageEvent; 

require_once(__DIR__ . "/../../../vendor/autoload.php"); 

class EventHandler 
{ 
    public static function prePackageInstall(PackageEvent $event) 
    { 
     $operation = $event->getOperation(); 
     $package = $operation->getPackage(); 
     if ($package->getName() !== 'company/repo-name') { 
      return; 
     } 

     $distUrl = 'https://github.com/company/repo-name/releases/download/%s/archive.zip?access_token=%s'; 
     $package->setDistUrl(sprintf($distUrl, "v" . $package->getFullPrettyVersion(), '[GITHUB-USER-TOKEN]')); 
    } 
} 

Hinweis [GITHUB-USER-TOKEN], die, wenn das Paket auf dem privaten Repo (wie in meinem Fall) ist erforderlich.

In composer.json

"pre-package-install": [ 
      "Company\\Composer\\EventHandler::prePackageInstall" 
     ], 
0

Erstellen Sie Ihr eigenes Bash- oder Shell-Skript, das all Ihre schmutzige Arbeit erledigt. Ihr Bash-Skript sollte während der Installation über Composer ausgelöst werden. Include, Paketinstallation, Zip-Archiv und Upload per SCP-Befehl in Ihrem Skript. Dies wird alles für dich tun. Stellen Sie sicher, dass Sie in den "read me install notes" erwähnen, dass der Benutzer die Installation von Composer mit sudo-Rechten oder Administratorrechten ausführen muss.

Im Folgenden sind einige Links zu Referenz

https://getcomposer.org/doc/articles/scripts.md

https://edmondscommerce.github.io/composer/composer-run-utility-bash-script.html

0

Ich glaube, Shell-Skripte zu verwenden, was Sie suchen, Ihre composer.json würde die Einrichtung konfiguriert werden dist stattdessen verwenden von auto für seine preferred-install:

https://getcomposer.org/doc/06-config.md#preferred-install

Dann können Sie eine neue Version mit dem entsprechenden Tag in GitHub erstellen und die Binärdateien dort hochladen.

PS: Ich habe das nicht getestet, aber es scheint, dass es funktionieren sollte.

+0

Das habe ich auch zuerst gedacht, aber leider lädt es nur das Archiv des gesamten Repos herunter. –

0

hinzufügen in composer.json

"repositories": [ 
     { 
     "type": "path", 
     "url": "./laravel-package-name" 
     } 
], 

und neuen Ordner Laravel-Paket-Namen mit Ihrem Code in Projektordner erstellen