Besteci: Eskilerini güncellemeden başka bir bağımlılığı nasıl kurabilirim?


196

Birkaç bağımlılığı olan bir projem var ve bir tane daha yüklemek istiyorum, ama diğerlerini oldukları gibi tutmak istiyorum. Bu yüzden düzenledim composer.json, ama composer installkoşarsam, aşağıdaki çıktıyı alırım:

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.

Her şeyden önce, mcrypt yüklü, bu yüzden neden bu konuda şikayetçi olduğunu bilmiyorum.

Peki, bu yeni bağımlılığı nasıl kurabilirim?

Bestecim.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"
}

1
Mcrypt uyarısı birden fazla php kurulumundan olabilir… mcrypt uzantılı php, php-
cli'nuzla

Yanıtlar:


294

Yeni bir paket yüklemek ve sadece bunu yapmak için iki seçeneğiniz vardır:

  1. requireKomutu kullanarak şunu çalıştırın:

    composer require new/package
    

    Composer, kullanılacak en iyi sürüm kısıtlamasını tahmin edecek, paketi kuracak ve ekleyecektir composer.lock.

    Ayrıca, aşağıdakileri çalıştırarak açık bir sürüm kısıtlaması belirleyebilirsiniz:

    composer require new/package ~2.5
    

-VEYA-

  1. updateKomutu kullanarak, yeni paketi manuel olarak ekleyin ve composer.jsonçalıştırın:

    composer update new/package
    

Composer "Gereksinimleriniz yüklenebilir bir paket kümesine çözülemedi" ifadesini şikayet ederse, bayrağını ileterek bunu çözebilirsiniz --with-dependencies. Bu, yüklemeye / güncellemeye çalıştığınız paketin tüm bağımlılıklarını beyaz listeye ekler (ancak diğer bağımlılıklarınızın hiçbiri).

Soru sorucunun Laravel ve mcrypt ile ilgili sorunları hakkında: CLI php.ini dosyasında düzgün şekilde etkinleştirildiğinden emin olun. Eğer php -mmcrypt listelemiyor sonra kayıp.

Önemli: Kullanırken belirtmeyi unutmayın ! Bu argümanı atlamak tüm bağımlılıkların yanı sıra güncellenmesine de neden olur .new/packagecomposer updatecomposer.lock


3
"Güncelleme için listelenen paket [...] yüklü değil. Yoksayılıyor."
Gerry

11
Bu benim için işe yaramıyor. Güncelleme için listelenen 'Paket "x / y" kurulu değil.
Yok sayılıyor

3
Sadece işe yaramıyor. "Gereksinimleriniz yüklenebilir bir paket grubuna çözümlenemedi." (ve bazı eski paketler hakkında metin, hiç sormadım ilgili değil) sadece bir paketi güncellemek istediğimde.
OZ_

@tremby Burada gayet iyi çalışıyor. Belki de "new/package" : "*",composer.json "require"bölümüne eklemeyi unuttunuz ?
Potherca

@OZ_ Yalnızca bir bağımlılık kurulacak olsa bile , diğer bağımlılıklarınızla çakışmadığından emin olmak için öncelikle çözülmesi gerekir .
Potherca

31

Aslında, doğru çözüm:

composer require vendor/package

Besteci için CLI belgelerinden alınmıştır :

requireKomut için yeni paketler ekler composer.jsongeçerli dizinden dosyası.

php composer.phar require

Gereksinimleri ekledikten / değiştirdikten sonra, değiştirilen gereksinimler yüklenecek veya güncellenecektir.

Gereksinimleri etkileşimli olarak seçmek istemiyorsanız, bunları komuta iletebilirsiniz.

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

composer updateComposer.json içinde bulunan yeni paketleri yüklediği doğru olsa da, composer.lock dosyasını ve yüklü paketleri composer.json içinde bulunan herhangi bir bulanık mantığa ( >veya *iki nokta üst üste işaretlerinden) göre de güncelleyecektir ! Bunu kullanarak önlenebilir composer update vendor/package, ancak potansiyel olarak kırılmış bir projeden uzakta unutulmuş bir argüman olduğunuz için bunu alışkanlık haline getirmenizi tavsiye etmem…

composer require vendor/packageYeni bağımlılıklar eklemek için işleri akılda tutun ve bağlı kalın! 😉


Ancak composer requirecomposer.lock dosyasını kullanarak güncelleme yapar mı?
Phil

2

Kullanım durumum daha basittir ve sadece başlığınıza uyar, ancak daha fazla ayrıntıya uymaz.

Yani, composer.jsondiğer tüm paketleri güncellemeden henüz içimde olmayan yeni bir paket yüklemek istiyorum .

Buradaki çözüm composer require x/y


1

Benim durumumda, bir repo vardı:

  • A, B, C, D gereksinimleri .json
  • ama sadece A, B, C .lock

Bu arada, A, B, C, kilit oluşturulduğunda daha yeni sürümlere sahipti.

Bazı nedenlerden dolayı, "satıcıları" sildim ve yapmak istedim composer installve mesajla başarısız oldum :

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.

Seldaek'in çözümünü çalıştırmayı denedim composer update vendorD/libraryDama besteci daha fazla şeyi güncellemek için ısrar etti, bu yüzden .lockgit aracımı gördüğüm çok fazla değişiklik olmuştu.

Kullandığım çözüm:

  1. Tüm vendorsdizini sil .
  2. Gereksinimi geçici VendorD/LibraryDolarak .json.
  3. çalıştırın composer install.
  4. Daha sonra dosyayı silin .jsonve repodan tekrar kontrol edin (dosyayı yeniden eklemekle eşdeğerdir, ancak olası boşluk değişikliklerinden kaçının).
  5. Sonra Seldaek'in çözümünü çalıştırın composer update vendorD/libraryD

Kütüphaneyi yükledi, ancak ek olarak, gitdiff bana .locksadece yeni şeylerin diğerlerini düzenlemeden eklendiğini gösterdi.

(İşaretçi için Thnx Seldaek;))


bu bir aşırıya kaçma. kilit dosyasını silin ve besteci yüklemesini çalıştırın. işe yarıyor
astroanu

6
Bu, bağımlılıkları mutlu bir şekilde yeniden oluşturabileceğiniz profesyonel olmayan ortamlar için geçerli kalır ve bir şey bozulursa gidip düzeltirsiniz. Ancak sizin için başarısız olan sunucular saatte 10.000 dolar kaybedeceğiniz anlamına gelirse, o zaman composer.lockasla mutlu bir şekilde silinip yeniden oluşturulmaması gerektiğinden şüphe duymazsınız. .lockkilitleme için !! ; D - aksi takdirde kilit dosyası işe yaramaz ve bunu yapmazsınız ya da hiç olmazdı. Kalite odaklı bir şirkette çalışıp 1.000 bağımlılık ile bir kilit inşa ederseniz, hepsi değişecek ve KG çalışanları sizi öldürmeye gelecek hahaha.
Xavi Montero

2
Hey @astroanu, daha erken bir tarihte bir bağımlılık yüklediyseniz ve bağımlılığının bir kısmının dev master'ın en son sürümünü aldığını açıklığa kavuşturmak için, sadece composer.lock'u silip sadece yüklemeye vurmada önemli sorunlar olabileceğini açıklığa kavuşturmak için. Bir bağımlılık getirmenin etkisini doğrulama fırsatınız yoksa, beklenmedik sonuçlar ve muhtemelen kullanıcılar için kötü bir deneyim yaratma potansiyeli vardır.
dkcwd

elbette, kilit dosyasını silmek ve kilit dosyasını silmeden bile yükleme / güncelleme veya güncellemeyi çalıştırmak uygulamaların istikrarını etkileyecektir. Besteci güncellemesi yalnızca geliştirme ortamında çalıştırılmalıdır. Üretimde her zaman besteci yüklemesini kullanın, çünkü üretim derlemesi kilit dosyasında kaydedilenlere karşı test edilir.
astroanu
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.