2015-08-17 34 views
6

È possibile indicare al compositore di installare una dipendenza solo quando si utilizzano versioni PHP specificate?Dipendenza del compositore per la versione di PHP specificata

Motivo: la mia libreria utilizza la funzione password_hash, disponibile in 5.5+, e c'è una libreria di compatibilità ircmaxell/password-compat per PHP 5.4. Tuttavia l'installazione di questa libreria su PHP 5.5+ è completamente inutile. Quindi, è possibile dire al compositore di installare ircmaxell/password-compat solo quando è in esecuzione sulle versioni < 5.5?

Breve storia per rendere la questione più chiaro - Voglio dire compositore:

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

Grazie in anticipo.

P.S. Si prega di inviare solo risposte dirette come fare questo, non eventuali soluzioni alternative o suggerimenti per eliminare il supporto 5.4. Posso anche venire con loro, sto cercando la soluzione intelligente qui :)

+0

Sì, guarda questo http://odino.org/managing-php-dependencies-with-composer/ – RiggsFolly

+0

Penso che la cosa migliore da fare sia dare uno sguardo agli [script] (https://getcomposer.org/doc /articles/scripts.md) proprietà e lavorando qualcosa fuori con quello. – vascowhite

+0

@RiggsFolly Forse mi manca qualcosa, ma non riesco a trovare nulla in quell'articolo che risponde alla domanda dell'OP? – vascowhite

risposta

3

La risposta breve è "Non è possibile".

La dipendenza non è massiccia. Perché non lasciarlo semplicemente installare comunque? Se sei su PHP 5.5, le funzioni password incorporate saranno comunque utilizzate.

È inoltre possibile creare una dipendenza opzionale password-compat (suggests). Il problema è che spetta al manutentore installarlo insieme alla tua applicazione.

Infine, è possibile creare un pacchetto virtuale secondario. Supponiamo che il tuo pacchetto si chiami "Acme". Sarebbe possibile creare un pacchetto secondario "Acme-php54" che dipende da sia password_compat sia dal progetto principale. Ciò mantiene la dipendenza al di fuori del tuo progetto, ma direi che il più semplice è installarlo sempre per tutto il tempo che intendi supportare PHP 5.4, e rilasciare PHP 5.4 in un po 'di tempo quando si tratta di EOL.

+0

Sì, vedo che non è massiccio e lo farò se non troverò una soluzione adeguata qui. Voglio mantenere pulito il mio progetto, questo è il motivo per cui lo chiedo. – amik

+0

Ho apportato alcune modifiche con alcuni altri pensieri. – Evert

+0

Bene, grazie per altri pensieri :) ma 1) rendendolo una dipendenza opzionale non è molto bello, ha bisogno di un utente finale per pensare, complica la costruzione di Travis. 2) fare un pacchetto secondario non risolve il problema, la logica decisionale se installarlo o meno è ancora mancante. 3) Sono curioso di sapere se questo è possibile in generale, sì, posso anche inventare molte soluzioni simili :) – amik

2

Sì, è possibile.

Considerare di avere un ramo, ad es. 1.x per le versioni legacy php, come

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

e ramo 2.x per i requisiti di versione sciolto 5.5+

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

questo modo, vale a dire some/library:* risolverà alle versioni appropriate.

Un altro modo è quello di istruire gli utenti di aggiungere

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

da soli, se necessario.

Nota che alcuni utenti (incluso me stesso) possono cambiare il loro interprete php al volo e non saranno troppo felici di eseguire il debug di questo tipo di problemi di automaglianza.

+0

Bene, grazie, sembra l'approccio più vicino, tuttavia anche questo tipo di automagic non mi piace, quindi non lo farò se non è possibile farlo in un modo più pulito. – amik

Problemi correlati