作曲家需要PHPUnit的6.2失败
composer require --dev phpunit/phpunit
我得到以下信息:
composer require --dev phpunit/phpunit
Using version ^6.2 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 sebastian/object-enumerator (locked at 2.0.1) -> satisfiable by sebastian/object-enumerator[2.0.1].
- phpunit/phpunit 6.2.0 requires sebastian/object-enumerator ^3.0.2 -> satisfiable by sebastian/object-enumerator[3.0.2].
- phpunit/phpunit 6.2.1 requires sebastian/object-enumerator ^3.0.2 -> satisfiable by sebastian/object-enumerator[3.0.2].
- phpunit/phpunit 6.2.2 requires sebastian/object-enumerator ^3.0.2 -> satisfiable by sebastian/object-enumerator[3.0.2].
- phpunit/phpunit 6.2.3 requires sebastian/object-enumerator ^3.0.2 -> satisfiable by sebastian/object-enumerator[3.0.2].
- Conclusion: don't install sebastian/object-enumerator 3.0.2
- Installation request for phpunit/phpunit ^6.2 -> satisfiable by phpunit/phpunit[6.2.0, 6.2.1, 6.2.2, 6.2.3].
Installation failed, reverting ./composer.json to its original content.
这是我作曲的JSON文件:
"require": {
"php": "^7.0",
"laravel/framework": "^5.4",
"guzzlehttp/guzzle": "^6.3",
"symfony/psr-http-message-bridge": "^1.0",
"mcamara/laravel-localization": "^1.2",
"laravelcollective/html": "^5.4",
"laravel/socialite": "^3.0",
"yajra/laravel-datatables-oracle": "^7.9"
},
"require-dev": {
"fzaninotto/faker": "^1.6",
"symfony/css-selector": "^3.3",
"symfony/dom-crawler": "^3.3"
}
我试图让版本5.4以上,并总是得到一个类似的错误,但与其他依赖,似乎工作的唯一版本是5.0
如果运行composer update
,并显示composer.lock
文件和vendor
文件夹,则Composer将在更新之前将安装的版本带入帐户。
确保您已将锁定文件提交到您的项目存储库中,以便能够恢复当前版本。然后尝试另一次更新,但在此之前删除锁定文件和供应商文件夹。
我的经验是,这样的更新不会受已安装的版本的影响,这可能会阻止必要的更新。
调试依赖关系的另一个选择是使用composer why-not phpunit/phpunit 6.2.0
(使用您知道存在的显式版本 - 没有版本,命令的输出不是有意义的)。 Composer会为您提供阻止更新的依赖列表,供您进一步调查。
非常感谢你,它的工作原理 –
不,不,再次不*不解决这个通过删除锁文件*!这是有原因的,如果你强迫自己解决这个问题而不删除,你会知道它为什么在那里!经验法则:如果您运行'composer update phpunit/phpunit',则只会将phpunit列入白名单进行更新。在你的情况下,由于其他依赖关系,这将不起作用,所以也将它们列入白名单,并在这种情况下再次运行'composer update phpunit/phpunit sebastian/object-enumerator' - 重复此操作直到成功。你也可以将这与上面提到的原因结合起来,然后你就可以事先知道白名单更新的内容 –
@NormanM你的方法是假定更新通常是邪恶的,并且如果任何意外的软件包也被更新,将会破坏软件。这可能就是这种情况,如果没有测试存在,这是一种危险。另一方面,它会使一个相对直接的过程复杂化,因为软件应该能够指定它的依赖关系,并且只要符合要求,任何有意识的更新努力都应该能够更新任何内容。运行测试,看看它是否仍然有效,然后提交锁定文件。否则,从vcs中获取备份并返回到已知的工作版本。 – Sven
运行
$ composer require --dev phpunit/phpunit --update-with-dependencies
见https://getcomposer.org/doc/03-cli.md#require:
--update-与依赖性:另外需要更新新所需的软件包的依赖关系。
注意在这样的情况下删除composer.lock
是不是真的最好的主意,因为它可能会在破坏你的代码在其他地方的依赖拉动。您实际上只想一次更新特定的依赖项,而不是一次更新所有依赖项。
这对我有用。谢谢。 –
我用你的composer.json文件创建了一个新项目(制作一个作曲者安装),然后启动命令'composer require --dev phpunit/phpunit'没有任何问题。尝试启动一些调试命令,如上面的回答 – Matteo