composer why-not 和 prohibits 命令用于診斷包安裝失敗原因,前者分析指定版本無法安裝的依賴沖突,后者反向查找阻止安裝的包;例如 composer why-not monolog/monolog 3.0.0 顯示 PHP 版本不滿足要求,而 composer prohibits symfony/http-foundation:^6.0 揭示 laravel/framework 依賴鎖定及 PHP 版本限制;使用時需確認(rèn) platform 配置準(zhǔn)確,并結(jié)合 --with-dependencies、--dry-run 和 composer show 全面排查依賴問題。
當(dāng)你在使用 Composer 安裝或更新 PHP 包時,可能會遇到某些包無法安裝的情況。這時候你想知道“為什么這個版本不能被安裝”,Composer 提供了 prohibits 和 why-not 命令(實(shí)際是 why-not
或 prohibits
子命令)來幫助你分析版本沖突或阻塞原因。
這兩個命令本質(zhì)上是一樣的,用于告訴你某個包或某個版本為何不能被安裝。它們會檢查當(dāng)前項(xiàng)目中已聲明的依賴關(guān)系、鎖定文件(composer.lock)、以及全局約束,找出阻止目標(biāo)版本安裝的具體原因。
常見使用場景包括:
運(yùn)行以下命令查看為何某個版本無法安裝:
composer why-not vendor/package 2.0.0例如:
composer why-not monolog/monolog 3.0.0輸出結(jié)果會顯示類似:
phpunit/phpunit 9.5.0 requires php ^7.3 || ^8.0這說明雖然你想安裝 monolog/monolog 3.0.0,但它要求 PHP 8.0+,而你的環(huán)境或 platform
配置只支持到 7.2。
如果你想查是哪個已安裝的包導(dǎo)致某個包無法安裝,可以使用:
composer prohibits vendor/package:version例如:
composer prohibits symfony/http-foundation:^6.0輸出可能為:
laravel/framework v8.83.27 requires symfony/http-foundation ^5.4 -> satisfiable by symfony/http-foundation[v5.4.0, ..., v5.4.31]這里可以看到兩個問題:Laravel 8 鎖定了 Symfony 組件在 5.4.x,同時 PHP 版本也不支持 Symfony 6 所需的最低版本。
在使用這些命令時,注意以下幾點(diǎn)以提高排查效率:
composer.json
中的 config.platform
設(shè)置準(zhǔn)確,避免因虛假平臺版本導(dǎo)致誤判--with-dependencies
查看更完整的依賴鏈影響composer update --dry-run
預(yù)覽更新行為composer show
查看當(dāng)前已安裝包的實(shí)際版本基本上就這些。Composer 的 why-not
和 prohibits
是解決依賴沖突的利器,能快速定位是 PHP 版本、包版本約束還是間接依賴導(dǎo)致的問題。熟練使用它們可以大幅減少“為什么裝不上”這類困惑。
以上就是如何使用composer prohibits (或 why-not) 命令分析版本阻塞?的詳細(xì)內(nèi)容,更多請關(guān)注php中文網(wǎng)其它相關(guān)文章!
每個人都需要一臺速度更快、更穩(wěn)定的 PC。隨著時間的推移,垃圾文件、舊注冊表數(shù)據(jù)和不必要的后臺進(jìn)程會占用資源并降低性能。幸運(yùn)的是,許多工具可以讓 Windows 保持平穩(wěn)運(yùn)行。
微信掃碼
關(guān)注PHP中文網(wǎng)服務(wù)號
QQ掃碼
加入技術(shù)交流群
Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號