2013-03-04 60 views
140

我有一個項目有一些依賴關係,我想安裝另一個,但我想保持其他人的方式。所以,我編輯了composer.json,但如果我跑composer install,我得到下面的輸出:作曲家:我如何在不更新舊版的情況下安裝其他依賴項?

所有的
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. 

首先,我有安裝mcrypt的,所以我不知道爲什麼它抱怨有。

那麼,我該如何安裝這個新的依賴關係呢?

我composer.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警告可能來自多個php安裝...使用mcrypt擴展名的php可能與您的php-cli不一樣安裝 – Matthematics 2014-08-20 06:22:18

回答

216

要安裝一個新包,不僅如此,你有兩個選擇:

  1. 使用require命令,只需要運行:

    composer require new/package 
    

    作曲家會猜測最好的版本c約束使用,安裝軟件包,並將其添加到composer.lock

    也可以通過運行指定顯式版本約束:

    composer require new/package ~2.5 
    

-OR-

  • 使用update命令,添加將新包手動更改爲composer.json,然後運行:

    composer update new/package 
    
  • 如果作曲家抱怨,稱「你的要求不能被解析到一個安裝包集合的。」,你可以通過該標誌--with-dependencies解決這個問題。這會將您試圖安裝/更新的軟件包的所有依賴關係列入白名單(但不包括其他依賴項)。

    關於Laravel和mcrypt的問題提出者問題:請檢查它是否已在您的CLI php.ini中正確啓用。如果php -m沒有列出mcrypt,那麼它就會丟失。

    重要提示:使用composer update時,不要忘記指定new/package!省略該參數將導致所有依賴關係以及composer.lock被更新。

    +11

    不是意外......文檔不是太好... – blockhead 2013-10-14 19:18:41

    +81

    @blockhead你在運氣好,我們接受拉請求! – Seldaek 2013-10-16 10:09:20

    +3

    我收到消息「未列出用於更新的軟件包,忽略。」 – Gerry 2014-02-03 05:17:30

    0

    對我來說,我有一個回購有:

    • 要求A,B,C,d在.json
    • 但只有A,B,C在.lock

    與此同時,A,B,C在生成鎖時有更新的版本。

    出於某種原因,我刪除了「供應商」,並希望做一個composer install並與消息失敗:

    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的解決方案發出composer update vendorD/libraryD但作曲家堅持更新更多事情,所以.lock太變化看到我的我的混帳工具。

    我用的解決方案是:

    1. 刪除所有vendors目錄。
    2. 暫時從.json中刪除要求VendorD/LibraryD
    3. 運行composer install
    4. 然後刪除文件.json並從repo中再次檢出它(相當於重新添加文件,但是避免潛在的空白變化)。
    5. 然後運行Seldaek的解決方案composer update vendorD/libraryD

    它沒有安裝庫,但除此之外,git DIFF給我看,在.lock是沒有編輯其他的只添加了新的東西。

    (日Thnx Seldaek爲指針;))

    +0

    這是一個矯枉過正。只需刪除鎖定文件並運行作曲家安裝。它的工作原理 – astroanu 2015-01-22 04:17:11

    +4

    對於非專業版的環境,您可以愉快地重建依賴關係,並且如果出現故障,您就可以繼續修復它。但是如果對你來說,服務器失敗意味着你每小時花費10,000美元,那麼你不會懷疑'composer.lock'永遠不會被愉快地刪除和重建。 '.lock'是...鎖定! ; D - 否則鎖定文件將無用,你不會提交它或根本不存在。如果你運行在一個以質量爲導向的公司,重建並提交一個有1.000依賴關係的鎖,所有這些都會改變,QA的人會殺了你哈哈哈。 – 2015-01-22 12:04:50

    +2

    這就是爲什麼你安裝不更新 – astroanu 2015-01-22 12:16:42

    2

    我用例是簡單,適合簡單的標題,但不是你的進一步的細節。

    也就是說,我想安裝一個新軟件包,該軟件包尚未在我的composer.json中,但未更新所有其他軟件包。

    該解決方案在這裏是composer require x/y

    26

    其實,正確的解決辦法是:

    composer require vendor/package

    CLI documentation for Composer摘自:

    require命令增加了新的軟件包到composer.json文件從當前目錄。

    php composer.phar require

    追加/變更的要求後,經修改的要求將被安裝或更新。

    如果您不想以交互方式選擇需求,則可以將它們傳遞給命令。

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

    雖然這是事實,composer update安裝在composer.json發現新的軟件包,它也會根據任何模糊邏輯更新composer.lock文件和任何已安裝的軟件包>*冒號後面的冒號)在composer.json中找到!這可以通過使用composer update vendor/package是可以避免的,但是我不建議做的一種習慣,因爲你是一個被遺忘的說法遠離可能存在問題的項目...

    保持理智的事情,並與composer require vendor/package堅持添加新的依賴!

    +0

    但是會用'composer require'來更新composer.lock文件嗎? – Phil 2017-02-24 13:53:58

    相關問題