Bagaimana cara memperbarui perpustakaan tunggal dengan Komposer?

312

Saya hanya perlu menginstal 1 paket untuk distribusi SF2 saya (DoctrineFixtures).

Ketika saya berlari

php composer.phar update

saya mendapat

  - Updating twig/twig (dev-master 39d94fa => v1.13.0)
    The package has modified files:
    M CHANGELOG
    M doc/filters/batch.test
    M doc/filters/index.rst
    M doc/filters/url_encode.rst
    M doc/functions/index.rst
    M doc/tags/index.rst
    M doc/tests/index.rst
    M lib/Twig/Autoloader.php
    M lib/Twig/Compiler.php
    M lib/Twig/CompilerInterface.php
-10 more files modified, choose "v" to view the full list

Tampaknya pengembang terakhir mengedit banyak file di dalam vendor.

Untuk menyiasati ini, saya mencoba

php composer.phar update <package_name>

Tapi itu sepertinya tidak berhasil. Bagaimana saya bisa memperbarui / menginstal hanya satu perpustakaan dari composer.json?

Alat
sumber
Anda menggunakan perintah yang tepat. Bisakah Anda menunjukkan kepada Anda milik Anda composer.json?
cheesemacfly
silakan coba dengan perintah yang disediakan dalam jawaban saya jika tidak, harap berikan deskripsi kesalahan yang Anda dapatkan (yaitu, komposer keluaran jika komposer mengeluh)
Nicolai Fröhlich
Komposer Anda. John mungkin merujuk pada garpu alternatif dari suatu proyek.
iconoclast
Saya memperbarui ketergantungan khusus dalam proyek laravel saya dan menentukan komponen spesifik untuk menginstal secara eksplisit: komposer memperbarui laravelcollective / html. Itu sepertinya berhasil.
marko

Jawaban:

527

Untuk menginstal doctrine/doctrine-fixtures-bundledengan versi 2.1.*dan stabilitas minimum @devgunakan ini:

composer.phar require doctrine/doctrine-fixtures-bundle:2.1.*@dev

kemudian perbarui hanya paket tunggal ini:

composer.phar update doctrine/doctrine-fixtures-bundle
Nicolai Fröhlich
sumber
9
Semoga bermanfaat: menjalankan pembaruan / instal dengan -vvv (mode verbose: pembaruan komperer.phar -vvv paket / paket) kadang-kadang bisa lebih baik karena kadang-kadang prompt interaktif akan muncul yang mungkin disembunyikan
timhc22
1
Bagaimana jika ada kesalahan pada paket lain? (Dalam kasus saya instalasi berhenti).
Thomas Decaux
2
Bagaimana dengan persyaratan memicu pembaruan dari paket yang berbeda?
hakre
1
apa yang ingin kamu ketahui? dapatkah Anda menjadi lebih spesifik? Apakah Anda ingin tahu apakah itu bisa terjadi bahwa paket lain - secara eksplisit requiresebelum atau sebelumnya diunduh sebagai dependensi - akan secara otomatis diperbarui ketika menjalankan composer require <package>:<version-constraint>@<stability-flag>perintah?
Nicolai Fröhlich
7
> composer.phar perbarui doctrine / doctrine-fixture-bundle ini memperbarui semua paket lain juga (((
podarok
184

Jika Anda hanya ingin memperbarui beberapa paket dan tidak semua, Anda dapat mencantumkannya sebagai berikut:

php composer.phar update vendor/package:2.* vendor/package2:dev-master

Anda juga dapat menggunakan wildcard untuk memperbarui banyak paket sekaligus:

php composer.phar update vendor/*
  • --prefer-source : Instal paket dari sourcesaat tersedia.
  • --prefer-dist : Instal paket dari distsaat tersedia.
  • --ignore-platform-reqs : mengabaikan php, hhvm, lib-*dan ext-*persyaratan dan memaksa instalasi bahkan jika mesin lokal tidak memenuhi ini. Lihat juga platform opsi konfigurasi .
  • --dry-run : Simulasikan perintah tanpa benar-benar melakukan apa pun.
  • --dev : Instal paket yang terdaftar di require-dev(ini adalah perilaku default).
  • --no-dev : Lewati menginstal paket yang terdaftar di require-dev. Generasi autoloader mengabaikan autoload-devaturan.
  • --no-autoloader : Melewati pembuatan autoloader.
  • --no-scripts : Melewati eksekusi skrip yang didefinisikan dalam composer.json.
  • --no-plugins : Menonaktifkan plugin.
  • --no-progress : Menghapus tampilan progres yang dapat mengacaukan beberapa terminal atau skrip yang tidak menangani karakter backspace.
  • --optimize-autoloader (-o) : Konversi PSR-0/4 ke classmap untuk mendapatkan autoloader yang lebih cepat. Ini direkomendasikan terutama untuk produksi, tetapi dapat mengambil sedikit waktu untuk berjalan sehingga saat ini tidak dilakukan secara default.
  • --lock : Hanya memperbarui hash file kunci untuk menekan peringatan tentang file kunci yang kedaluwarsa.
  • --dengan-dependensi : Tambahkan juga semua dependensi paket yang masuk daftar putih ke daftar putih.
  • --prefer-stable : Memilih versi dependensi yang stabil.
  • --prefer-terendah : Memilih versi dependensi yang lebih rendah. Berguna untuk menguji versi persyaratan minimal, yang biasanya digunakan bersama --prefer-stable.
Yosvel Quintero Arguelles
sumber
Harap dicatat bahwa pengguna ZSH mungkin perlu membungkus vendor/*tanda kutip mereka :composer update "vendor/*"
ZeroThe2nd
51

Perbedaan antara menginstal, memperbarui dan membutuhkan

Asumsikan skenario berikut:

composer.json

"parsecsv/php-parsecsv": "0.*"

file composer.lock

  "name": "parsecsv/php-parsecsv",
            "version": "0.1.4",

Rilis terbaru adalah 1.1.0. 0.*Rilis terbaru adalah0.3.2

Install: composer install parsecsv/php-parsecsv

Ini akan menginstal versi 0.1.4seperti yang ditentukan dalam file kunci

memperbarui: composer update parsecsv/php-parsecsv

Ini akan memperbarui paket ke 0.3.2. Versi tertinggi sehubungan dengan composer.json Anda. Entri composer.lockakan diperbarui.

memerlukan: composer require parsecsv/php-parsecsv

Ini akan memperbarui atau menginstal versi terbaru 1.1.0. Anda composer.lockberkas dan composer.jsonfile akan diperbarui juga.

Adam
sumber
luar biasa, jadi untuk menyegarkan satu paket dalam versi terbatas itu composer update author/packagedan kemudiancomposer install author/package
William Randokun
@WilliamRandokun jika Anda telah menginstalnya sebelumnya, maka itu composer update packagesudah cukup, tidak perlu memanggil instal setelahnya
Adam
1
persis apa yang saya cari. dijelaskan dengan baik. upvoted
kapitan
15

Anda pada dasarnya dapat melakukan yang berikut untuk menginstal paket baru juga.

php composer.phar require

maka terminal akan meminta Anda untuk memasukkan nama paket untuk pencarian.

$ Search for a package []: //Your package name here

Kemudian terminal akan menanyakan versi paket (Jika Anda ingin versi terbaru biarkan kosong)

$ Enter the version constraint to require (or leave blank to use the latest version) []: //your version number here

Kemudian Anda cukup menekan tombol kembali. Terminal akan meminta paket lain, jika Anda tidak ingin menginstal yang lain cukup tekan tombol kembali dan Anda akan selesai.

orhankutlu
sumber
6

Anda dapat menggunakan perintah berikut untuk memperbarui modul apa pun dengan dependensinya

composer update vendor-name/module-name --with-dependencies
Wolfack
sumber
5

Untuk memastikan bahwa komposer memperbarui satu paket yang sudah diinstal ke versi terakhir dalam batasan versi yang Anda atur di composer.json hapus paket dari vendor dan kemudian jalankan:

php composer.phar update vendor/package
Tsounabe
sumber
4
Anda akan menemukan saran yang sama di posting ini: github.com/composer/composer/issues/3112 . PS: Pemungutan suara tanpa penjelasan sangat mudah dilakukan dan tidak berguna.
Tsounabe
5

Gunakan saja

composer require {package/packagename}

Suka

composer require phpmailer/phpmailer

jika paket tidak ada dalam folder vendor .. komposer memasangnya dan jika paket ada paket pembaruan komposer ke versi terakhir.

Mostafa
sumber
2

Karena Anda ingin menginstal paket tertentu "Saya hanya perlu menginstal 1 paket untuk distribusi SF2 saya (DoctrineFixtures)."

php composer.phar require package/package-name:package-version akan cukup

Anh
sumber