Saya punya proyek dengan beberapa dependensi dan saya ingin menginstal yang lain, tapi saya ingin yang lain tetap seperti itu. Jadi saya sudah mengedit composer.json
, tetapi jika saya jalankan composer install
, saya mendapatkan output berikut:
Installing dependencies from lock file
Warning: The lock file is not up to date with the latest changes in composer.json. You may be getting outdated dependencies. Run update to update them.
Your requirements could not be resolved to an installable set of packages.
Problem 1
- laravel/framework dev-master requires ext-mcrypt * -> the requested PHP extension mcrypt is missing from your system.
- laravel/framework dev-master requires ext-mcrypt * -> the requested PHP extension mcrypt is missing from your system.
- Installation request for laravel/framework dev-master -> satisfiable by laravel/framework dev-master.
Pertama-tama, saya sudah menginstal mcrypt, jadi saya tidak tahu mengapa itu mengeluh tentang itu di sana.
Jadi, bagaimana saya bisa menginstal dependensi baru ini?
Komposer saya. Json:
{
"require": {
"opauth/opauth": "*",
"opauth/facebook": "*",
"opauth/google": "*",
"opauth/twitter": "*",
"imagine/Imagine": "dev-develop",
"laravel/framework": "4.*",
"loic-sharma/profiler": "dev-master"
},
"autoload": {
"classmap": [
"app/libraries",
"app/commands",
"app/controllers",
"app/models",
"app/database/migrations",
"app/tests/TestCase.php"
]
},
"minimum-stability": "dev"
}
composer-php
dualitas_
sumber
sumber
Jawaban:
Untuk menginstal paket baru dan hanya itu, Anda memiliki dua opsi:
Menggunakan
require
perintah, jalankan saja:Composer akan menebak batasan versi terbaik untuk digunakan, menginstal paket, dan menambahkannya
composer.lock
.Anda juga dapat menentukan batasan versi eksplisit dengan menjalankan:
-ATAU-
Dengan menggunakan
update
perintah, tambahkan paket baru secara manualcomposer.json
, lalu jalankan:Jika Composer mengeluh, dengan menyatakan "Persyaratan Anda tidak dapat diselesaikan ke paket yang dapat diinstal.", Anda dapat menyelesaikan ini dengan mengoper flag
--with-dependencies
. Ini akan membuat daftar putih semua dependensi dari paket yang Anda coba instal / perbarui (tetapi tidak ada dependensi Anda yang lain).Mengenai masalah pertanyaan penanya dengan Laravel dan mcrypt: periksa apakah diaktifkan dengan benar di CLI php.ini Anda. Jika
php -m
tidak mencantumkan mcrypt maka itu hilang.Penting: Jangan lupa untuk menentukan
new/package
kapan menggunakancomposer update
! Dengan mengabaikan argumen itu, semua dependensicomposer.lock
akan diperbarui.sumber
"new/package" : "*",
di"require"
bagian composer.json ?Sebenarnya, solusi yang benar adalah:
composer require vendor/package
Diambil dari dokumentasi CLI untuk Komposer :
Meskipun benar bahwa
composer update
menginstal paket baru yang ditemukan di composer.json, itu juga akan memperbarui file composer.lock dan semua paket yang diinstal sesuai dengan logika fuzzy (>
atau*
karakter setelah titik dua) ditemukan di composer.json! Ini dapat dihindari dengan menggunakancomposer update vendor/package
, tetapi saya tidak akan merekomendasikan untuk membiasakannya, karena Anda satu argumen terlupakan dari proyek yang berpotensi rusak ...Pertahankan keadaan dengan tetap waras
composer require vendor/package
untuk menambah ketergantungan baru! 😉sumber
composer require
memperbarui file composer.lock?Kasing saya lebih sederhana, dan hanya cocok dengan judul Anda tetapi tidak detail Anda lebih lanjut.
Artinya, saya ingin menginstal paket baru yang belum ada di saya
composer.json
tanpa memperbarui semua paket lainnya.Solusinya di sini adalah
composer require x/y
sumber
Dalam kasus saya, saya memiliki repo dengan:
.json
.lock
Sementara itu, A, B, C memiliki versi yang lebih baru sehubungan dengan kunci dibuat.
Untuk beberapa alasan, saya menghapus "vendor" dan ingin melakukan
composer install
dan gagal dengan pesan:Saya mencoba menjalankan solusi dari Seldaek mengeluarkan
composer update vendorD/libraryD
tapi komposer bersikeras untuk memperbarui lebih banyak hal, jadi.lock
terlalu banyak perubahan melihat alat git saya.Solusi yang saya gunakan adalah:
vendors
dir.VendorD/LibraryD
dari.json
.composer install
..json
dan checkout kembali dari repo (setara dengan menambahkan kembali file, tetapi menghindari kemungkinan perubahan spasi putih).composer update vendorD/libraryD
Memang menginstal perpustakaan, tetapi di samping itu,
git
diff menunjukkan kepada saya bahwa.lock
hanya hal-hal baru yang ditambahkan tanpa mengedit yang lain.(Thnx Seldaek untuk penunjuk;))
sumber
composer.lock
seharusnya tidak pernah dengan senang hati dihapus dan dibangun kembali..lock
adalah ... untuk mengunci !! ; D - jika file kunci tidak akan berguna dan Anda tidak akan melakukannya atau tidak ada sama sekali. Jika Anda menjalankan perusahaan yang berorientasi pada kualitas dan membangun kembali dan melakukan kunci dengan mengatakan 1.000 dependensi, semuanya akan berubah, dan orang-orang QA akan datang untuk membunuh Anda hahaha.