Apa perbedaan antara pembaruan komposer dan pemasangan komposer?

160

Apa perbedaannya composer update dan composer install?

Dawlatzai Ghousi
sumber

Jawaban:

297

pembaruan komposer

composer update akan memperbarui dependensi Anda sebagaimana ditentukan dalam composer.json

Misalnya, jika Anda memerlukan paket ini sebagai ketergantungan:

"mockery/mockery": "0.9.*",

dan Anda telah menginstal 0.9.1versi paket, menjalankan composer updateakan menyebabkan peningkatan paket ini (misalnya 0.9.2, jika sudah dirilis)

secara rinci composer updateakan:

  • Baca composer.json
  • Hapus paket yang diinstal yang tidak diperlukan lagi di composer.json
  • Periksa ketersediaan versi terbaru dari paket yang diperlukan Anda
  • Instal versi terbaru dari paket Anda
  • Pembaruan composer.lockuntuk menyimpan versi paket yang diinstal

pemasangan komposer

composer installtidak akan memperbarui apa pun; itu hanya akan menginstal semua dependensi seperti yang ditentukan dalam composer.lockfile

Secara terperinci:

  • Periksa apakah composer.lockfile ada (jika tidak, jalankan composer-updatedan buat itu)
  • Baca composer.lockfile
  • Instal paket yang ditentukan dalam composer.lockfile

Kapan menginstal dan kapan memperbarui

  • composer updatesebagian besar digunakan dalam 'tahap pengembangan', untuk meningkatkan paket proyek kami sesuai dengan apa yang telah kami tentukan dalam composer.jsonfile,

  • composer install terutama digunakan dalam 'tahap penggelaran' untuk menginstal aplikasi kami pada server produksi atau pada lingkungan pengujian, menggunakan dependensi yang sama yang disimpan dalam file composer.lock yang dibuat oleh pembaruan komposer.

Moppo
sumber
5
Anda tidak menjelaskan apa yang akan terjadi jika kami tidak memiliki file kunci dan memanggil komposer untuk menginstal. Deskripsi bagus btw.
user1954544
1
Hal penting yang mungkin menggigit Anda suatu hari - file kunci tidak bersifat rekursif. Jika beberapa paket memiliki ketergantungan yang ditentukan secara longgar dan jika Anda kebetulan mengambil salinan bersih suatu proyek pada mesin yang bersih, ia mungkin memasang versi berbeda dari dependensi bersarang, yang mungkin termasuk bug baru atau bahkan merusak perubahan! Terutama relevan pada integrasi berkelanjutan & membangun server. Solusinya - berburu untuk paket bermasalah yang bersarang dan menambahkan versi tetap yang baik ke file json dan kunci.
JustAMartin
dan composer global updatememperbarui dependensi dalam repositori global Anda pada sistem lokal ( COMPOSER_HOMEvariabel env)
Yousha Aleayoub
1
Lalu, bagaimana saya bisa memperbarui paket tertentu dengan aman di server produksi?
Michel
@Michel Pertama-tama Anda harus menjalankan composer updatepada sistem lokal Anda dan menguji aplikasi Anda, kemudian mengunggah komposer. Buka server produksi Anda dan jalankancomposer install
Amin Shojaei
58

Ketika Anda menjalankannya composer installakan mencari file kunci dan menginstal apa pun yang terkandung di dalamnya, jika tidak dapat menemukannya, ia akan membacacomposer.json , menginstal dependensi dan menghasilkan file kunci.

Ketika Anda menjalankannya composer updatecukup membaca composer.json, instal dependensi dan perbarui lockfile (atau buat lockfile baru).

Tim Sheehan
sumber
23

composer install

  1. Jika composer.lockmemang ada.
    • Memproses dan menginstal dependensi dari composer.lockfile.
  2. Jika composer.locktidak tidak ada.
    • Paket proses menginstal dari composer.json.
    • Membuat composer.lockfile berdasarkan paket yang diinstal.

Sesuai composer help install::

Perintah install membaca composer.lockfile dari direktori saat ini, memprosesnya, dan mengunduh serta menginstal semua pustaka dan dependensi yang diuraikan dalam file itu. Jika file tidak ada, ia akan mencari composer.jsondan melakukan hal yang sama.


composer update

  1. Memproses dependensi dari composer.json file (menginstal, memperbarui, dan menghapus).
  2. Membuat atau memperbarui composer.lockfile sesuai dengan perubahan.

Sesuai composer help update::

Perintah pembaruan membaca composer.jsonfile dari direktori saat ini, memprosesnya, dan memperbarui, menghapus atau menginstal semua dependensi.


Lihat juga: Komposer: Ini Semua Tentang File Kunci

kenorb
sumber
instal komposer titik 3 tidak masuk akal. Jika file .lock sudah ada, itu hanya akan membacanya dan tidak pernah "memperbarui" itu. Ini hanya dibuat jika belum ada ..
Ben
@Ben Saya sudah menjelaskan poin-poinnya, beri tahu saya apakah itu masuk akal sekarang.
kenorb
3

Perbedaan terbaik antara composer updatedancomposer install

pemasangan komposer

Untuk menambahkan dependensi, Anda perlu menambahkannya secara manual ke file composer.json.

Jika file composer.lock ada, instal persis apa yang dikhususkan pada file ini

  • Kalau tidak, baca file composer.json untuk melihat dependensi apa yang perlu diinstal
  • Tulis komposer. Buka dengan informasi proyek (dependensi yang terinstal)

Tidak ada komponen yang akan diperbarui dengan perintah ini.

pembaruan komposer

Untuk menambah atau menghapus dependensi, Anda perlu menambahkannya secara manual ke file composer.json

  • File composer.lock akan diabaikan
  • dependensi file composer.json akan diinstal dan diperbarui (jika dependensi tidak diinstal itu akan diunduh)

Jika Anda tidak dapat (atau tidak tahu cara menambah atau menghapus pustaka yang sebenarnya mudah, cukup tambahkan nama dependensi dan versi di properti yang memerlukan file) ubah file composer.json secara manual atau Anda lebih suka menggunakan baris perintah sebagai gantinya, komposer memiliki fungsi khusus untuk ini:

komposer membutuhkan

Sebagai contoh jika kita ingin menambahkan ketergantungan dengan baris perintah, kita cukup menjalankannya

composer require twig/twig

  • File composer.json akan dimodifikasi secara otomatis dan ketergantungan baru akan ditambahkan
  • ketergantungan akan diunduh ke proyek

komposer hapus

Jika Anda ingin menghapus ketergantungan yang tidak digunakan, kami hanya akan menjalankan:

composer remove twig/twig --update-with-dependencies

  • Ranting akan dihapus dengan semua dependensinya
Mayank Dudakiya
sumber
1

pemasangan komposer

if(composer.lock existed){
   installs dependency with EXACT version in composer.lock file
} else {
   installs dependency with LATEST version in composer.json
   generate the composer.lock file
}

pembaruan komposer

composer update = remove composer.lock -> composer install

Kenapa kita perlu 2 perintah. Saya pikir itu bisa dijelaskan oleh composer.lock.

Bayangkan, kita TIDAK punya composer.lockdan dalam composer.json, ada ketergantungan "monolog/monolog": "1.0.*"atau "monolog/monolog": "^1.0".
Kemudian, ia akan memiliki beberapa kasus

  • Kami bekerja dengan baik hari ini dengan versi dependensi saat ini (mis: 1.0.0) tetapi beberapa bulan kemudian, pembaruan dependensi (mis .: 1.0.1) dan mungkin ada beberapa bug
  • Anggota tim lain mungkin memiliki versi ketergantungan yang berbeda jika dijalankan composer installdalam waktu yang berbeda.

Bagaimana jika kita selalu menggunakan versi EXACT di composer.jsonseperti "monolog/monolog": "1.0.1"?
Kami masih membutuhkannya composer.lockkarenacomposer.json hanya melacak versi utama ketergantungan Anda, itu tidak dapat melacak versi dependensi ketergantungan.

Bagaimana jika semua dependensi dependensi juga menggunakan versi EXACT?
Bayangkan Anda mulai dengan SEMUA dependensi yang menggunakan versi EXACT maka Anda tidak peduli composer.lock. Namun, beberapa bulan kemudian, Anda menambahkan dependensi baru (atau memperbarui dependensi lama), dan dependensi dependensi ini tidak menggunakan versi EXACT. Maka lebih baik peduli composer.lockpada awalnya.

Selain itu, ada keuntungan dari versi semantik daripada versi yang tepat. Kami dapat memperbarui ketergantungan berkali-kali selama pengembangan dan perpustakaan sering memiliki beberapa perubahan kecil seperti perbaikan bug. Maka lebih mudah untuk meningkatkan ketergantungan yang menggunakan versi semantik.

Phan Van Linh
sumber