2015-08-17 2 views
6

ist es möglich, Composer zu sagen, eine Abhängigkeit nur zu installieren, wenn bestimmte PHP-Versionen verwendet werden?Composer-Abhängigkeit für angegebene PHP-Version

Grund: meine Bibliothek verwendet die Funktion password_hash, die in 5.5+ verfügbar ist, und es gibt eine Kompatibilitätsbibliothek ircmaxell/password-compat für PHP 5.4. Die Installation dieser Bibliothek unter PHP 5.5+ ist jedoch völlig sinnlos. Ist es möglich, dem Compiler zu sagen, dass er ircmaxell/password-compat nur installieren soll, wenn er auf den Versionen < 5.5 läuft?

Kurzgeschichte der Frage klarer zu machen - ich will Komponisten sagen zu:

IF php version < 5.5: 
    install ircmaxell/password-compat 
ELSE: 
    skip ircmaxell/password-compat 

Vielen Dank im Voraus.

P.S. Bitte posten Sie nur direkte Antworten, wie dies zu tun ist, keine Problemumgehungen oder Vorschläge 5.4 Unterstützung zu fallen. Ich kann auch mit ihnen kommen, ich suche die intelligente Lösung hier :)

+0

Ja sieh dir das an http://odino.org/managing-php-dependencies-with-composer/ – RiggsFolly

+0

Ich denke deine beste Wette ist ein Blick auf die [Skripte] (https://getcomposer.org/doc /articles/scripts.md) Eigentum und etwas damit zu arbeiten. – vascowhite

+0

@RiggsFolly Vielleicht vermisse ich etwas, aber ich kann nichts in diesem Artikel finden, der die Frage des OP beantwortet? – vascowhite

Antwort

3

Die kurze Antwort ist "Es ist nicht möglich".

Die Abhängigkeit ist keine massive. Warum sollte es nicht einfach installiert werden? Wenn Sie PHP 5.5 verwenden, werden die integrierten Passwortfunktionen weiterhin verwendet.

Sie können auch password-compat eine optionale Abhängigkeit (suggests) machen. Das Problem ist dann, dass der Betreuer es neben Ihrer Anwendung installieren muss.

Schließlich könnten Sie ein sekundäres, virtuelles Paket erstellen. Angenommen, Ihr Paket heißt "Acme". Es wäre möglich, ein sekundäres "Acme-php54" -Paket zu erstellen, das von password_compat und Ihrem Hauptprojekt abhängig ist. Dies hält die Abhängigkeit von Ihrem Projekt fern, aber ich würde argumentieren, dass es am einfachsten ist, es immer nur zu installieren, solange Sie PHP 5.4 unterstützen wollen, und PHP 5.4 einfach in eine kurze Zeit fallen zu lassen, wenn es EOLs gibt.

+0

Ja, ich sehe, dass es nicht massiv ist und ich werde das tun, wenn ich hier keine passende Lösung bekomme. Ich möchte mein Projekt sauber halten, darum bitte ich darum. – amik

+0

Einige Änderungen mit ein paar weiteren Gedanken gemacht. – Evert

+0

Gut danke für weitere Gedanken :) aber 1) macht es zu einer optionalen Abhängigkeit ist nicht sehr nett, braucht Endnutzer zu denken, kompliziert Travis Build. 2) wenn ein sekundäres Paket nicht das Problem löst, fehlt noch die Entscheidungslogik, ob es installiert werden soll oder nicht. 3) Ich bin gespannt, ob das überhaupt möglich ist, ja ich kann mir auch viele ähnliche Problemumgehungen einfallen lassen :) – amik

2

Ja, es ist möglich.

Betrachten wir eine Verzweigung, z.B. 1.x für ältere PHP-Versionen, wie

{ 
    "name": "some/library", 
    "version": "1.0.0", 
    "require": { 
     "ircmaxell/password-compat": "*" 
    } 
} 

und 2.x Zweig für 5.5+

{ 
    "name": "some/library", 
    "version": "2.0.0", 
    "require": { 
     "php": ">=5.5" 
    } 
} 

Auf diese Weise lose Version Anforderungen, das heißt some/library:* werden, um geeignete Versionen zu beheben.

Eine andere Möglichkeit ist es, die Benutzer anweisen,

"replace": { 
    "ircmaxell/password-compat": "*" 
} 

selbst hinzufügen, wenn nötig.

Beachten Sie, dass einige Benutzer (einschließlich mir selbst) ihren PHP-Interpreter im laufenden Betrieb ändern können und nicht allzu glücklich sind, diese Art von automatischen Problemen zu debuggen.

+0

Nun, danke, das sieht als naheste Annäherung aus, aber ich mag diese Art von Automagic auch nicht, also werde ich es nicht tun, wenn es nicht möglich ist auf eine sauberere Art und Weise. – amik