Pertanyaan Komposer: hapus paket, bersihkan dependensi, jangan perbarui paket lain


Situasi

Katakanlah saya memiliki proyek dengan dua paket yang dipasang oleh Komposer:

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

The autogenerated composer.json file terlihat seperti ini:

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

Di autogenerasi composer.lock file, ada dua paket yang diminta:

  • 2.0.0 squizlabs/php_codesniffer
  • 2.1.3 phpmd/phpmd

dan juga empat dependensi phpmd/phpmd:

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

Beberapa hari kemudian, squizlabs/php_codesniffer versi 2.1.0 dilepaskan, tapi saya tidak mau untuk berlari update namun. Saya ingin tetap menggunakan versi 2.0.0 untuk saat ini, dan mungkin aku akan lari update dalam beberapa hari.


Pertanyaan

Saya sekarang ingin menghapus phpmd/phpmd dari proyek saya. Saya ingin mencapai poin-poin berikut:

  1. Menghapus phpmd/phpmd dari composer.json
  2. Menghapus phpmd/phpmd dari composer.lock
  3. Menghapus phpmd/phpmd dari vendor map
  4. Hapus semua dependensi phpmd/phpmd dari composer.lock
  5. Hapus semua dependensi phpmd/phpmd dari vendor map
  6. Jangan perbarui squizlabs/php_codesniffer ke versi 2.1.0

Edit: Saya lebih suka solusi yang tidak perlu mengubah kendala versi squizlabs/php_codesniffer di composer.json


Apa yang sudah saya coba

Jika saya menjalankan:

php composer.phar remove phpmd/phpmd

ini mencapai poin 1, 2, 3, 6, tetapi tidak mencapai poin 4, 5.

Ketergantungan dari phpmd/phpmd tetap di composer.lock dan vendor map.

Jika saya menjalankan:

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

ini mencapai poin 1, 2, 3, 4, 5, tetapi tidak mencapai titik 6.

squizlabs/php_codesniffer diperbarui ke versi 2.1.0.


32
2018-01-14 14:03


asal


Jawaban:


Hapus entri dari composer.json lalu lari composer update phpmd/phpmd.

Seperti mengapa itu adalah solusi yang berhasil. Saya tidak tahu tapi itulah yang diperlukan untuk menghapus paket sepenuhnya dari composer.lock dan /vendor dan memungkinkan Anda memasang paket baru / pengganti / konflik.


25
2018-06-09 02:30



Melakukan hal ini:

php composer.phar remove phpmd/phpmd

Ubah file composer.json sehingga berisi bagian yang membutuhkan berikut.

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

Sekarang jalankan composer.phar update. Itu akan membuat Anda berada di tempat yang Anda inginkan.

catatan: Anda juga bisa menyematkan paket php_codesniffer ke versi tertentu mis. 2.0.0. Informasi lebih lanjut tentang bagaimana komposer melakukan pembuatan versi dapat ditemukan sini.


11
2018-01-15 02:25



Saya tidak percaya ini saat ini menjadi mungkin. Ini adalah hal yang mungkin Anda inginkan kirim sebagai permintaan fitur ke Komposer.

Sementara itu, saya pikir taruhan terbaik Anda adalah pergi dengan opsi # 1: php composer.phar remove phpmd/phpmd

Ini akan menghapus paket dari dependensi eksplisit Anda tanpa memaksa Anda memperbarui apa pun. Dependensi yang usang dari pustaka yang dihapus akan tetap ada hingga Anda menjalankan berikutnya composer update, yang merupakan sesuatu yang harus Anda lakukan secara berkala. Sebagian besar file dari dependensi lama harus disetel ke autoload satu atau lain cara, jadi Anda seharusnya tidak memiliki penalti nyata untuk menyimpan file-file tersebut selain dari ruang yang mereka gunakan pada disk.


0
2017-11-10 19:57



Untuk menghapus paket dari file .json dan .lock Anda harus menghapus paket sebagai berikut:

composer remove package-name

0
2017-07-04 19:07