Ho un progetto che contiene, tra gli altri, i seguenti composer.json
dipendenze:Le singole dipendenze del Composer possono essere soppresse dal caricamento (automatico)?
"propel/propel1": "dev-master"`,
"halleck45/phpmetrics": "dev-master"
Recentemente ho fatto un composer update
e ha scoperto che una nuova versione di una libreria richiesta da PhpMetrics, chiamato Hoa, introduce una nuova classe \EngineException
a emulare una nuova classe PHP7. Sfortunatamente, Propel 1 definisce anche \EngineException
e quindi risulta un conflitto.
La correzione corretta per questo sarebbe l'aggiornamento a Propel 2, che utilizza gli spazi dei nomi. Tuttavia questo è ancora in alpha ed è soggetto alle interruzioni di BC, quindi non è davvero praticabile per me.
mio attuale correzione è quello di bloccare Hoa a una versione specifica che non ha la nuova classe:
"hoa/core": "2.15.04.*"
che non è una cattiva soluzione, ma non è del tutto soddisfacente per bloccare una libreria per un vecchio versione.
Nel codice Hoa, l'unico modo per non caricare la nuova classe è eseguire PHP 7, che non è ancora possibile. Tuttavia, mi viene anche in mente che Hoa deve solo essere require
d quando PhpMetrics viene eseguito. Questo è uno strumento di analisi del codice stand-alone e si trova solo nella radice del progetto per comodità; il resto del progetto non usa questa libreria.
Quindi, sarebbe bello se potessi chiamare qualcosa in Composer per chiedere che questa classe non sia (automatica) caricata, o forse qualcosa che faccia lo stesso nel composer.json
. Al momento è caricato inutilmente, non so se è stato caricato automaticamente in modo errato o se è in corso require
d da Composer.
Può essere utile sapere che le classi Hoa sono state aggiunte da Composer allo script generato automaticamente autoload_psr4.php
. Per quanto posso fare, understand the docs, questo significa che è caricato automaticamente, e nel mio progetto non c'è nulla che richiederebbe una delle classi Hoa.
Dipende da come la classe è caricato automaticamente. Il normale caricamento automatico non dovrebbe causare danni, poiché dovrebbe fermarsi dopo che la classe è stata trovata una sola volta, presupponendo che entrambi offrano la stessa funzionalità. Se, tuttavia, il file viene caricato automaticamente con il caricatore automatico "file", non c'è molto che tu possa fare. Vedi https://getcomposer.org/doc/04-schema.md#autoload –
Grazie a @Bert. Il tuo commento mi induce a pensare che l'approccio di Hoa sia infranto: la classe '\ EngineException' [appare in un file chiamato Consistency.php] (https://github.com/hoaproject/Core/blob/2.15.07.05/Consistency.php # L952), quindi la classe di eccezioni viene caricata indipendentemente dal fatto che mi piaccia o meno. Tuttavia, non so cosa costringa Consistency.php a caricare - che semplicemente non è richiesto dal mio progetto. – halfer