Bagaimana cara memaksa komposer untuk menginstal ulang perpustakaan?

97

Saya menggunakan aplikasi kerangka ZF2 dan memiliki .gitignore yang mencegah perpustakaan eksternal untuk berkomitmen pada git. Saat debugging saya suka pergi dan mengubah hal-hal di sana-sini di sumber perpustakaan untuk mempelajari cara kerja sesuatu. Jika ini adalah versi yang dikontrol, akan sangat mudah untuk mengembalikannya ke keadaan semula.

Bagaimana saya bisa memaksa Komposer untuk menginstal ulang kerangka tertentu sehingga saya bisa mendapatkan salinan baru yang tidak dimodifikasi lagi?

NB: Harap jangan menyarankan untuk menghapus file .gitignore karena ada karena suatu alasan; itu mencegah perpustakaan pihak ketiga saya masuk ke repositori aplikasi saya. Saya selalu dapat menginstalnya selama penerapan otomatis.

Julian
sumber
2
Salah satu opsinya adalah menghapus composer.lock dan kemudian menjalankan composer install
vascowhite

Jawaban:

48

Anda dapat menggunakan --prefer-sourceflag untuk komposer untuk memeriksa paket eksternal dengan informasi VCS (jika ada). Anda cukup kembali ke keadaan semula. Juga jika Anda mengeluarkan composer updateperintah, komposer akan mendeteksi setiap perubahan yang Anda buat secara lokal dan menanyakan apakah Anda ingin membuangnya.

File .gitignore Anda terkait dengan proyek root Anda (kerangka ZF2) dan mencegah direktori vendor (di mana lib pihak ketiga Anda berada) untuk melakukan komitmen ke VCS Anda sendiri. File abaikan tidak terkait dengan repo git vendor Anda.

Bram Gerritsen
sumber
7
Awalnya saran -prefer-source Anda tidak berfungsi sampai saya menyadari bahwa saya harus menghapus dan menginstal ulang semua perpustakaan agar ini berfungsi seperti yang saya inginkan dan kemudian composer status -vmemberi saya info dengan perubahannya.
Julian
167

Hapus saja folder vendor Anda

rm -rf vendor/*
Zoran
sumber
@Loenix, buka kunci mereka.
Halfstop
7
Saya pernah mengalami kasus di mana cache lokal rusak, jadi bahkan setelah menghapus direktori vendor saya terus menginstal ulang ketergantungan yang rusak. composer clearcacheadalah tambahan yang bagus dalam kasus seperti itu.
okdewit
3
Ini sepertinya pendekatan yang sangat radikal mengingat komposer kemudian perlu menginstal ulang semua paket ketika OP hanya perlu menginstal ulang satu paket. composer require vendor/packageakan melakukan apa yang diinginkan OP dan dalam waktu yang lebih singkat. Saya sedikit terkejut bahwa begitu banyak yang memilih jawaban ini.
frederickjh
jika komposer clearcache tidak berfungsi, Anda dapat menghapus direktori /home/[username]/.cache. Itu akan memaksa pengunduhan ulang. Berguna jika Anda menggunakan pembuat paket komposer pribadi, selain packagist.composer.org, dan seseorang membuat perubahan tanpa menambahkan tag baru.
Neil Davis
2
Komposer tidak selalu hanya menginstal di direktori vendor, jadi meskipun sebagai pendekatan yang sulit, komposer tidak berfungsi di semua situasi.
ummdorian
36

Saya tidak ingin menghapus semua paket dalam vendor/direktori, jadi inilah cara saya melakukannya:

  1. rm -rf vendor/package-i-messed-up
  2. composer install lagi
Yerke
sumber
4
atau 'komposer membutuhkan vendor / package-i-messed-up' akan bagus juga
aarcarr
1
Jika itu tidak berhasil, Anda mungkin menjalankannya composer clearcacheterlebih dahulu jika cache rusak karena suatu alasan.
Sean the Bean
26

Apa yang saya lakukan:

  1. Menghapus folder perpustakaan tertentu itu
  2. composer update --prefer-source vendor/library-name

Itu mengambil perpustakaan lagi bersama dengan repo gitnya

Attila Fulop
sumber
Jika itu tidak berhasil, Anda mungkin menjalankannya composer clearcacheterlebih dahulu jika cache rusak karena suatu alasan.
Sean the Bean
3

Seperti yang ditunjukkan oleh pengguna @aaracrr dalam komentar pada jawaban lain, mungkin jawaban terbaik adalah dengan meminta kembali paket dengan batasan versi yang sama.

yaitu.

composer require vendor/package

atau menentukan batasan versi

composer require vendor/package:^1.0.0
frederickjh
sumber
1

Untuk beberapa alasan tidak ada yang menyarankan cara yang jelas dan paling mudah untuk menginstal ulang paksa:

> composer remove vendor-name/package-name && composer vendor-name/package-name
Yevgen
sumber