注意你的composer.json的minimum-stability設定 !!
因為Laravel 4.2預設沒有安裝PHPUnit與Mockery,所以想自己用composer require安裝,但沒想到卻安裝到正在開發中的PHPUnit 6.0。重點是PHPUnit 6.0只支援PHP 7,因為Homestead 0.2.7裝的是PHP 5.6.10,而導致PHPUnit安裝失敗,而這一切的原因竟然因為是…
問題
我想在一個前人所留下的Laravel 4.2專案安裝PHPUnit,在專案目錄下了:1
composer require phpunit/phpunit --dev
沒想到竟出現以下錯誤:1
Using version ^6.0@dev for phpunit/phpunit
./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
Your requirements could not be resolved to an installable set of packages.
Problem 1
- Installation request for phpunit/phpunit ^6.0@dev -> satisfiable by phpunit/phpunit[6.0.x-dev].
- phpunit/phpunit 6.0.x-dev requires php >=7.0 -> your PHP version (5.6.10-1+deb.sury.org~trusty+1) or "config.platform.php" value does not satisfy that requirement.
Installation failed, reverting ./composer.json to its original content.
意思是即將安裝>=6.0且<7.0的@dev版本,即開發中的版本,重點是PHPUnit 6.0只支援PHP 7.0以上,而目前Homestead 0.2.7為PHP 5.6.10,所以無法安裝PHPUnit。
討論
為什麼composer會去抓PHPUnit 6.0呢?
1 | { |
63行1
"minimum-stability": "dev"
因為宣告為dev,所以composer才去抓正在開發中的PHPUnit 6.0了。
解決方法
1 | "minimum-stability": "stable" |
改成stable之後,再composer require phpunit/phpunit --dev 就一切正常了,會自動抓目前最新的穩定版本:PHPUnit 5.0.3。
Laravel 4.2的要求是PHP 5.4,由於PHPUnit 5.x只支援PHP 5.6與PHP 7,雖然在Homestead 0.2.7可以安裝PHPUnit 5.x,不過可能無法在測試主機的PHP 5.4跑testing,所以建議只安裝PHPUnit 4.x即可。1
composer require phpunit/phpunit:~4.0 --dev
Conclusion
- PHPUnit在Oct.02,2015宣布重要改版,
PHPUnit 5.x將支援PHP 5.6與PHP 7,PHPUnit 6.x將只支援PHP 7,而PHP 5.3、PHP 5.4與PHP 5.5將只能使用PHPUnit 4.x。 - Package建議不要安裝
dev版本,除非有特別原因。 - 若專案由多人開發,建議安裝package之前檢查一下
minimum-stability的設定,避免裝到dev版。