每当我尝试使用composer添加新包时
"composer require packagename/package"
或使用"composer.phar update"
,我将更新所有已安装的软件包。作曲家有没有选择排除我不需要更新的一些软件包?
答案 0 :(得分:9)
运行此命令,看看你的软件包版本是什么:
composer show -i
转到composer.json
并编辑您希望永远不会更改composer update
的软件包,并为其正确编写版本:
"jacopo/laravel-authentication-acl": "1.3.*",
更改为:
"jacopo/laravel-authentication-acl": "1.3.11",
完成!现在,如果您运行composer update
此程序包未更新。
答案 1 :(得分:6)
根据我的经验,排除1或某些软件包的最佳方法是在composer update中使用--interactive。
$ composer update --interactive
执行此操作时,您可以选择要更新的软件包,并跳过您不想更新的软件包。
答案 2 :(得分:4)
您可以提供一个或多个要更新的软件包的名称:
composer update vendor1/package1 vendor1/package2 vendor2/*
,这只会更新这些包。
这不是特别排除,包括,但它肯定会更快地更新特定包。
为了避免使用require
命令的更新,您可以手工制作composer.json(这不是那么难),然后在刚添加的包上运行上述目标更新。
还可以使用--no-dev来排除开发包(如果您没有开发依赖于例如生产中的包)。这也加速了依赖性分析。
答案 3 :(得分:2)
使用composer require packagename/package
,您需要一个新的包,并且只获得packagename/package
及其依赖项的部分更新。
composer update packagename/package
可用于触发相同的部分更新,但如果您packagename/package
中已有composer.json
。
答案 4 :(得分:2)
如果您认为需要排除某些软件包的更新,我认为这是陷入依赖性混乱的开始。你应该在它变得更糟之前立即清理你的依赖。
根据我的经验,不想更新依赖关系的最主要原因是当您使用包的分支而不是已发布的版本时。你应该尽可能彻底地解决这个问题:
1.0.*
,~1.2
或^1.3.4
。composer.json
文件的“type = package”存储库条目中创建必要的元数据。composer.json
中指出某个提交ID。这将通常,您应该始终能够无条件地运行composer update
。如果没有,这是在您自己的composer.json
文件中未正确声明的依赖项的警告标志。
不想更新的第二个原因是程序包中的不兼容更改被标记为错误修复而不是主要版本增加。解决方案很简单:
composer.json
文件中排除较新的版本:如果您发现版本1.2.5损坏了"external/package":"~1.2"
,则会"external/package":"~1.2,!1.2.5"
而不是"external/package":"~1.2,!>=1.2.5"
软件。或者你可能害怕进一步的更新也会破坏你的软件,你可以放入composer require
。要添加的另一件事:如果您运行composer.json
,您将无法获得已安装的软件包的更新。他们是固定的。将根据所有已安装的版本选择所需的软件包,并且只有在可用版本与已安装的所有版本兼容的情况下才会安装。请注意,如果您自己的dev-master
和新软件包中的软件包分支存在依赖关系,则无法正常工作。原因是分支名称将是相同的,但您永远不会知道正在使用哪个提交。也许新软件包使用最近提交的time()
第三个软件包,而你自己的软件是一个非常旧的软件,并且之间存在不兼容的变化 - 这将破坏事情,而Composer无法检测到它。
答案 5 :(得分:1)
一种解决方法是使用replace
property,但是没有专门的命令,因此您可以像往常一样运行composer require foo/bar
(这将创建composer.json
),然后添加要忽略的包的新replace
部分。
或者自己创建composer.json
文件。这是一个例子:
{
"require": {
"radic/tmp-underscore-php": "1.2.0"
},
"replace": {
"patchwork/utf8": "*"
}
}
运行composer install
后,所需的包patchwork/utf8
将无法下载。