我发现composer.json & composer.lock
(php) hasconflict
部分(不要与合并冲突混淆)。其他类似的文件,如package.json/yarn.json
(nodejs) 或Pipfile
(python) 以及相应的锁定文件package-lock.json/yarn.lock
或Pipfile.lock
,即使所有这些锁定文件都具有相同的目的(锁定对确切版本的依赖)并以类似的方式实现(至少从表面上看)
那么它的用途是什么,我该怎么办?我阅读了作曲家文档https://getcomposer.org/doc/04-schema.md#conflict但我仍然感到困惑,例如
与此包的此版本冲突的包的映射。它们将不允许与您的软件包一起安装。
例如,运行后composer install
我有一个 composer.lock 说
{
"name": "symfony/http-kernel",
"version": "v4.4.20",
...
"conflict": {
"symfony/browser-kit": "<4.3",
"symfony/config": "<3.4",
"symfony/console": ">=5",
"symfony/dependency-injection": "<4.3",
"symfony/translation": "<4.2",
"twig/twig": "<1.43|<2.13,>=2"
},
...
很容易猜到 "symfony/console" 5.0 与 "symfony/http-kernel" 4.4.20 冲突,所以symfony/console 5.0
不会安装。
我需要对冲突做些什么吗?到目前为止,作为包用户(而不是包开发人员),我觉得这些信息只是仅供参考,我不需要做任何事情。但是,为什么还要麻烦为我列出它们呢?毕竟 package.json 和 Pipefile 没有这样的信息,没有它我也找不到问题。
- - 更新 - -
从我得到的答案中,我意识到我需要强调这一点:我理解composer.lock是为作曲家设计的,所以我不需要担心。
我不明白的是把它放在composer.json的目的,这个文件是供人类用户使用的。那么,如果它有一个冲突部分,我该怎么办呢?