Composer 2.0 踩雷與問題排除

沒想到 10/24 正式釋出後,沒兩天就發現問題了。

11/6 追加補充

這問題是聽其他朋友分享的。

問題很單純:Travis CI build 失敗,因為 Travis CI 預設會在設定 PHP 環境的時候,執行下面指令:

$ composer self-update
Updating to version 2.0.2 (stable channel).
Downloading (100%)
Use composer self-update --rollback to return to version 1.8.4

此資訊是從 Travis CI console 複製過來的。

因此可以想像 Travis CI rebuild 的時候,就會自動換 Composer 2.0 了。因為我昨天只有在本機試過是沒問題的,所以就確認一下看是哪些套件出問題,後來發現是下面這兩個:

這兩個套件有限制依賴 composer-plugin-api <= v1,寫法不同,總之就是不支援 v2 API,所以在跑 composer install 的時候會出錯。

解決方法

這次案例是有時間要求,所以是 rollback v1 解決的,在 Travis CI 適當的階段加上這行即可:

composer self-update --1

這這兩個套件來說,正規解法應該是版本更新:

  • kylekatarnls/update-helper 更新至 v1.2+
  • phpstan/phpstan 更新至 v0.12+

11/6 追加補充

補 Composer 2 剛踩到的雷:用 Laravel 至少要升到 v6.18.7 或 v7.6.0 以上才有修正這個問題,v8+ 則沒有問題。以下是相關資訊:

結論

確實如官網所提醒的,最容易出問題的地方是 Plugin API 版本不相容。

相對不容易發現問題的 platform 檢查,我覺得它才是比較可怕的,下次大家升 Composer 2.0,或有使用 Travis CI 的時候,記得要注意 Composer 有這些變動。

參考資料