2013-06-26 38 views
17

有没有办法告诉作曲家,每次我做composer update我想让他忽略一个特定的包?不更新特定包

+0

IIRC一个标志来做这样的事情即将到来 –

+0

希望它会来... –

回答

5

其实我不知道是否有任何方式告诉composer从更新中排除一个特定的包,但你可以告诉哪些软件包更新为

composer update <package> <package2>; // or 
php composer.phar update <package> <package2>; 

例如,

composer update foo/package1 bar/package2; // or 
php composer.phar update foo/package1 bar/package2; 

另外,我认为,如果您自己没有在composer.json(安装后删除)中列出它们,那么除非在列表中指定,否则它们将不会更新。

从作曲: 如果你只想安装或更新一个依赖,你可以白名单它们:

$ php composer.phar update monolog/monolog [...] 

Check this link并检查Composer

更新:(互联网上找到,但没有测试)

为了做到这一点,只是删除从composer.lock

+0

我试着从composer.lock中删除软件包,但不起作用。运行更新时,作曲家将其放回原处。手动更新所有其他软件包并不是我所需要的(但如果我没有得到更好的答案/解决方案,我会将您的答案标记为解决方案。谢谢@ sheikh-heera –

+0

嘿!作曲家的网站,据说它提到了软件包,比如'php composer.phar update monolog/monolog [...]'还有,你是否也尝试从'composer.json'中删除软件包? –

+3

如果你从composer.json中删除一个包,当你做一个'作曲者更新'时,它将被删除' –

23

包你有没有考虑指定所需的版本,您试图忽略包?例如:

"require": { 
    "some/package": "~1.2" 
} 

这可能会更新,因为你说的任何版本> = 1.2,< 2.0,但如果你严格说你要只有1.0的版本,你不应该看到该软件包的任何更新:

"require": { 
    "some/package": "1.2" 
} 
+0

这应该是被接受的答案.. right? – Juan

2

更新:仅适用于作曲家版本1.0.0-alpha6及更低版本。在版本1.0.0-alpha7及更高版本中使用它将删除“require-dev”中的所有软件包。

我相信目前你可以欺骗作曲家一些混乱,如果你可以负担你的项目。喜欢的东西:把所有的包,你不想在"require-dev"更新与composer update --no-dev

运行更新,如果你运行composer install我记得他们会从你的项目中删除只是要小心这一点。

这一切诡计实在是可恶,所以我们应该等待做这样的事情的官路,我个人更新包明确地指定他们

+0

这终于为我做了诀窍,绝对是唯一的解决方案。 – Conic

+0

'composer update --no-dev'删除了所有的“require-dev”软件包,不要使用它,我以困难的方式学到了它...... – Clyff

+0

@Clyff that's correct just just checked,它适用于版本<1.0.0-alpha7。它在/包括在1.0.0-alpha7中被重写。 – arma

0

要忽略一个特定的软件包,您可以使用provide(如果它的一部分您自己的套餐)或replace。这告诉Composer你希望提供/替换特定的软件包,所以它不会下载它。

这里是一个应该工作composer.json文件的例子:

{ 
    "require": { 
     "radic/tmp-underscore-php": "~1.2.0" 
    }, 
    "replace": { 
     "patchwork/utf8": "*" 
    } 
} 

在这个例子中,patchwork/utf8包裹会composer installupdate被忽略。

要排除特定版本,请参阅:Composer exclude specific versions