注意你的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
版。