如何使用Composer更新单个库?


311

我只需要为我的SF2发行版(DoctrineFixtures)安装1个软件包。

当我跑步

php composer.phar update

我懂了

  - Updating twig/twig (dev-master 39d94fa => v1.13.0)
    The package has modified files:
    M CHANGELOG
    M doc/filters/batch.test
    M doc/filters/index.rst
    M doc/filters/url_encode.rst
    M doc/functions/index.rst
    M doc/tags/index.rst
    M doc/tests/index.rst
    M lib/Twig/Autoloader.php
    M lib/Twig/Compiler.php
    M lib/Twig/CompilerInterface.php
-10 more files modified, choose "v" to view the full list

看来最后一位开发人员在供应商内部编辑了许多文件。

为了解决这个问题,我尝试了

php composer.phar update <package_name>

但这似乎不起作用。如何仅从composer.json更新/安装一个库?


您正在使用正确的命令。你能告诉我们你的composer.json吗?
cheesemacfly

请尝试使用我的答案中提供的命令,否则请提供您得到的错误的说明(即,如果作曲家抱怨的话,即作曲家输出)
NicolaiFröhlich13年

您的composer.json可能引用项目的备用fork。
iconoclast 2014年

我在laravel项目中更新了一个特定的依赖项,并指定了要显式安装的特定组件:composer update laravelcollective / html。这似乎可行。
marko

Answers:


526

要安装doctrine/doctrine-fixtures-bundle版本2.1.*和最低稳定性,请@dev使用以下命令:

composer.phar require doctrine/doctrine-fixtures-bundle:2.1.*@dev

然后仅更新此单个软件包:

composer.phar update doctrine/doctrine-fixtures-bundle

9
可能会有所帮助:使用-vvv运行更新/安装(详细模式:composer.phar更新-vvv软件包/软件包)有时可能会更好,因为偶尔会出现交互式提示,而该提示可能被隐藏了
timhc22 2014年

1
如果其他软件包有错误怎么办?(就我而言,安装已停止)。
Thomas Decaux

2
那么require会触发另一个软件包的更新吗?
hakre 2015年

1
您到底想知道什么?请您能更具体些吗?您是否想知道是否有可能require在运行该composer require <package>:<version-constraint>@<stability-flag>命令时自动更新另一个软件包- 之前是d,还是以前作为依赖下载。
NicolaiFröhlich2015年

7
> composer.phar update doctrine / doctrine-fixtures-bundle也将更新所有其他软件包((((
podarok

184

如果您只想更新一些软件包而不是全部,则可以这样列出它们:

php composer.phar update vendor/package:2.* vendor/package2:dev-master

您还可以使用通配符一次更新一堆软件包:

php composer.phar update vendor/*
  • --prefer-source:从source可用时安装软件包。
  • --prefer-dist:从dist可用时安装软件包。
  • -忽略平台的请求数:忽略phphhvmlib-*ext-*要求,并强制安装,即使在本地机器不履行这些。另请参阅platform config选项
  • --dry-run:模拟命令而无需实际执行任何操作。
  • --dev:安装中列出的软件包require-dev(这是默认行为)。
  • --no-dev:跳过安装中列出的软件包require-dev。自动加载器的生成会跳过autoload-dev规则。
  • --no-autoloader:跳过自动加载器的生成。
  • --no-scripts:跳过执行composer.json中定义的脚本。
  • --no-plugins:禁用插件。
  • --no-progress:删除进度显示,该显示可能会与某些不处理退格字符的终端或脚本混淆。
  • --optimize-autoloader(-o):将PSR-0 / 4自动加载转换为类映射,以获得更快的自动加载器。特别建议在生产环境中使用此功能,但是可能要花一些时间才能运行,因此默认情况下当前不执行此操作。
  • --lock:仅更新锁定文件哈希以禁止显示有关锁定文件已过期的警告。
  • --with-dependencies:还将白名单软件包的所有依赖项添加到白名单中。
  • --prefer-stable:更喜欢稳定的依赖版本。
  • --prefer-lowest:首选最低版本的依赖项。用于测试最低要求版本,通常与一起使用--prefer-stable

请注意,ZSH用户可能需要将其vendor/*用引号引起来:composer update "vendor/*"
ZeroThe2nd

51

安装,更新和要求之间的区别

假定以下情况:

composer.json

"parsecsv/php-parsecsv": "0.*"

composer.lock文件

  "name": "parsecsv/php-parsecsv",
            "version": "0.1.4",

最新版本是1.1.0。最新0.*版本是0.3.2

安装: composer install parsecsv/php-parsecsv

这将安装0.1.4锁定文件中指定的版本

更新: composer update parsecsv/php-parsecsv

这会将软件包更新为0.3.2。关于composer.json的最高版本。中的条目composer.lock将被更新。

要求: composer require parsecsv/php-parsecsv

这将更新或安装最新版本1.1.0。您的composer.lock文件和composer.json文件也会被更新。


太棒了,所以要刷新受限制版本中的一个程序包composer update author/package,然后composer install author/package
William Randokun

@WilliamRandokun如果您之前已安装过,那么就composer update package足够了,不需要在安装后调用install
Adam

1
正是我想要的。很好的解释。upvoted
kapitan

14

您基本上可以按照以下步骤安装新软件包。

php composer.phar require

然后终端将要求您输入要搜索的软件包名称。

$ Search for a package []: //Your package name here

然后终端将询问软件包的版本(如果您想获得最新版本,则将其留空)

$ Enter the version constraint to require (or leave blank to use the latest version) []: //your version number here

然后,您只需按回车键。终端将询问另一个软件包,如果您不想安装另一个软件包,只需按回车键即可。


6

您可以使用以下命令来更新任何模块及其依赖项

composer update vendor-name/module-name --with-dependencies

5

为了确保composer在您在composer.json中设置的版本限制内将已经安装的一个软件包更新到最新版本,请从供应商处删除该软件包,然后执行:

php composer.phar update vendor/package

4
您将在这篇文章中找到相同的建议:github.com/composer/composer/issues/3112。PS:没有解释的不赞成投票很容易做到,而且没有用。
Tsounabe

5

只需使用

composer require {package/packagename}

喜欢

composer require phpmailer/phpmailer

如果软件包不在供应商文件夹中.. composer进行安装,并且软件包存在,则composer将软件包更新到最新版本。


2

因为您想安装特定的软件包,“我只需要为我的SF2发行版(DoctrineFixtures)安装一个软件包即可。”

php composer.phar require package/package-name:package-version 够了

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.