話說現在寫PHP的用composer的多不多啊,我有一個問題請教大神

來源:互聯網
上載者:User
關鍵字 php composer
我有一個問題:一般是在項目目錄的vendor目錄下建立composer.json檔案,裡面有要引入的包,命令列切換到vendor目錄下面,composer update就會下載這些依賴,下載的包會在vendor目錄下面,但是如果包之間相互依賴,而出現依賴相同的包,但是不一樣的版本,那怎麼辦呢,這不就衝突了嗎?

比如我要引入A包和B包,他們又同時依賴C包,A依賴C 1.0.0版本,B依賴C 2.0.0版本,那這樣C包不衝突了嗎,如果vendor目錄下面的包目錄是帶版本號碼就好了,不然可怎麼辦呢?

回複內容:

我有一個問題:一般是在項目目錄的vendor目錄下建立composer.json檔案,裡面有要引入的包,命令列切換到vendor目錄下面,composer update就會下載這些依賴,下載的包會在vendor目錄下面,但是如果包之間相互依賴,而出現依賴相同的包,但是不一樣的版本,那怎麼辦呢,這不就衝突了嗎?

比如我要引入A包和B包,他們又同時依賴C包,A依賴C 1.0.0版本,B依賴C 2.0.0版本,那這樣C包不衝突了嗎,如果vendor目錄下面的包目錄是帶版本號碼就好了,不然可怎麼辦呢?

同一個包,不指定版本的話,通常是下載的最新的版本,需要中間版本,可以指定版本。

具體規則如下:

  1. 確切的版本號碼 1.0.2 你可以指定包的確切版本。

  2. 範圍 >=1.0 >=1.0,<2.0 >=1.0,<1.1|>=1.2 通過使用比較操作符可以指定有效版本範圍。 有效運算子:>、>=、<、<=、!=。
    你可以定義多個範圍,用逗號隔開,這將被視為一個邏輯AND處理。一個管道符號|將作為邏輯OR處理。 AND 的優先順序高於 OR。

  3. 萬用字元 1.0.* 你可以使用萬用字元來指定一種模式。1.0.與>=1.0,<1.1是等效的。

  4. 賦值運算子 ~1.2 這對於遵循語義化版本號碼的項目非常有用。~1.2相當於>=1.2,<2.0。想要瞭解更多,請閱讀下一小節。

上面的「未註冊使用者」說了些乾貨,但是似乎理解錯了題主的意思。 題主的意思應該是,兩個包(比如 AB)同時依賴與第三個包(比如 C),但是依賴的版本並不同(比如 A 依賴 C 1.0B 依賴 C 2.0),怎麼解決衝突的問題。

我的答案是,沒法解決。在同一個項目中,某個包的版本肯定是固定的。
無論是用了 精準版本號碼範圍版本賦值版本號碼 之類的方式指定版本,在 composer require 或者 composer install 之後,本地的包的版本一定是有一個準確版本號碼了。不可能運行時做到 A 使用 C 的時候 C 就是 1.0B 使用 C 的時候 C 就是 2.0

所以唯一的辦法就是找到一個 AB 都能用的 C 的版本。如果不能,不好意思,包衝突,無法運行。

補充說明,這個C版本衝突其實是代碼邏輯的衝突,不是簡單的檔案夾衝突,靠改變檔案夾是沒法解決的。
以我上面舉的例子說明,假如包 C 定義了一個常量 C_VERSION,這個常量的值表示 C 本身的版本號碼字串。

那一個同時載入了 AB 的程式啟動並執行時候,輸出 C_VERSION,到底是 1.0 還是 2.0 呢?

真實常見的情況是,程式運行報錯,因為兩次引入不同的包 C 發生衝突,報 notice,然後誰先載入就是誰。

這代碼也就太亂了。

難道大家這個用得還不多嗎,不會吧

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.