Compositore: rimuovere un pacchetto, per ripulire le dipendenze, non aggiornare altri pacchetti

La situazione

Diciamo che ho un progetto con due pacchetti installati dal Compositore:

php composer.phar require 'squizlabs/php_codesniffer:~2.0' 'phpmd/phpmd:~2.1'

Generata automaticamente composer.json file simile a questo:

{
    "require": {
        "squizlabs/php_codesniffer": "~2.0",
        "phpmd/phpmd": "~2.1"
    }
}

Nel generata automaticamente composer.lock file, ci sono due pacchetti richiesti:

  • 2.0.0 squizlabs/php_codesniffer
  • 2.1.3 phpmd/phpmd

e anche quattro dipendenze di phpmd/phpmd:

  • 2.0.4 pdepend/pdepend
  • 2.5.9 symfony/config
  • 2.5.9 symfony/dependency-injection
  • 2.5.9 symfony/filesystem

Un paio di giorni più tardi, squizlabs/php_codesniffer versione 2.1.0 viene rilasciato, ma non voglio
per eseguire update di sicurezza. Io voglio stare sulla versione 2.0.0 per ora, e forse corro update in pochi giorni.


La domanda

Ora voglio rimuovere phpmd/phpmd dal mio progetto. Voglio raggiungere i seguenti punti:

  1. Eliminare phpmd/phpmd da composer.json
  2. Eliminare phpmd/phpmd da composer.lock
  3. Eliminare phpmd/phpmd dal vendor cartella
  4. Eliminare tutte le dipendenze di phpmd/phpmd da composer.lock
  5. Eliminare tutte le dipendenze di phpmd/phpmd dal vendor cartella
  6. Non aggiornare squizlabs/php_codesniffer alla versione 2.1.0

Edit: io preferirei una soluzione che non richiede modifica del
versione vincolo di squizlabs/php_codesniffer in composer.json


Quello che ho cercato

Se ho eseguito:

php composer.phar remove phpmd/phpmd

in questo modo si ottiene punti 1, 2, 3, 6, ma non ottenere punti 4, 5.

Le dipendenze di phpmd/phpmd rimanere in composer.lock e il vendor cartella.

Se ho eseguito:

php composer.phar remove phpmd/phpmd
php composer.phar update

in questo modo si ottiene punti 1, 2, 3, 4, 5, ma non raggiungere il punto di 6.

squizlabs/php_codesniffer viene aggiornato alla versione 2.1.0.

 

5 Replies
  1. 37

    Rimuovere la voce da composer.json quindi eseguire composer update phpmd/phpmd.

    Perché è la soluzione che funziona. Non ho idea, ma questo è ciò che è necessario per rimuovere un pacchetto totalmente da composer.lock e /vendor e per consentire l’installazione di un nuovo/sostituzione/conflitto pacchetto.

    • Ty un sacco , sembra compositore è pieno di hack, a volte id non mi permette di upgradem ma permette di rimuovere+installazione. In mu caso la cura funziona come un fascino
    • si potrebbe impostare questa risposta come soluzione?
  2. 16

    Fare questo:

    php composer.phar remove phpmd/phpmd

    Modificare il compositore.file json in modo che contenga le seguenti richiedono sezione.

    {
        "require": {
            "squizlabs/php_codesniffer": "2.0.*",
        }
    }

    Ora eseguire composer.phar update. Che dovrebbe arrivare dove si vuole essere.

    Nota: Si potrebbe anche aggiungere il php_codesniffer pacchetto di una versione specifica per es. 2.0.0. Ulteriori informazioni su come compositore fa il controllo delle versioni può essere trovato sul qui.

    • Grazie per la tua risposta. Questo effettivamente ottenere quello che voglio. Tuttavia, se possibile, preferirei una soluzione che non richiede la modifica la versione vincolo di squizlabs/php_codesniffer in composer.json. Scusate, mi avrebbero fatto questo chiaro nella mia domanda. Idealmente, sto cercando qualcosa di simile a MacPorts’ --follow-dependencies bandiera uninstall comando: “Disinstallare le porte che sono stati automaticamente installati come dipendenze di rimuovere la porta e non c’è più bisogno.
    • Theres un –update-con-le dipendenze bandiera. Forse questo è quello che stai cercando
  3. 3

    Per rimuovere il pacchetto .json e .bloccare i file è necessario rimuovere il pacchetto come segue:

    composer remove package-name
    • La domanda esplicitamente specificato che questo non comporti il comportamento desiderato. Puoi spiegarti meglio perché si pensa che questo funziona?
    • Non ha funzionato per me. Pacchetto ancora lì.
  4. 2

    Ho trovato questa risposta qui,

    1. Rimuovere manualmente il pacchetto dal compositore.json.
    2. Eliminare manualmente fornitore cartella.
    3. Eseguire composer install (da dentro la cartella del progetto).

    Compositore re-installa i pacchetti elencati nel compositore.json.

    • Se anche voi rimuovere i pacchetti dal compositore.blocco quindi funziona. Per me comunque.
  5. 0

    Non credo per questo di essere attualmente possibile. Questo è il genere di cosa che si potrebbe desiderare di inviare una richiesta di funzionalità di Compositore.

    Nel frattempo, penso che la vostra scommessa migliore è di andare con l’opzione #1: php composer.phar remove phpmd/phpmd

    Sarà rimuovere il pacchetto da dipendenze esplicite senza costringere l’utente ad aggiornare nulla. La obsoleti dipendenze dal tuo rimosso biblioteca rimarrà fino alla prossima run composer update, che è qualcosa che si dovrebbe fare periodicamente in ogni caso. La maggior parte dei file dal vecchio dipendenze deve essere impostato per caricare automaticamente un modo o nell’altro, quindi non dovreste avere alcun reale sanzioni per la conservazione di tali file in giro altro che lo spazio su disco.

Lascia un commento