如何使用Composer更新单个库?

Too*_*ool 279 symfony composer-php

我需要为我的SF2发行版安装一个软件包(DoctrineFixtures).

我跑的时候

php composer.phar update
Run Code Online (Sandbox Code Playgroud)

我明白了

  - 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
Run Code Online (Sandbox Code Playgroud)

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

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

php composer.phar update <package_name>
Run Code Online (Sandbox Code Playgroud)

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

Nic*_*ich 470

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

composer.phar require doctrine/doctrine-fixtures-bundle:2.1.*@dev
Run Code Online (Sandbox Code Playgroud)

然后只更新这个包:

composer.phar update doctrine/doctrine-fixtures-bundle
Run Code Online (Sandbox Code Playgroud)

  • 可能会有所帮助:使用-vvv运行更新/安装(详细模式:composer.phar更新-vvv包/包)有时会更好,因为偶尔会出现一个交互式提示,否则可能会隐藏 (8认同)
  • &gt; composer.phar update doctrine / doctrine-fixtures-bundle也将更新所有其他软件包((( (3认同)
  • require 会触发不同包的更新吗? (2认同)
  • 不起作用,这更新了许多软件包 (2认同)

Yos*_*ero 173

如果您只想更新一些软件包而不是所有软件包,可以将它们列为:

php composer.phar update vendor/package:2.* vendor/package2:dev-master
Run Code Online (Sandbox Code Playgroud)

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

php composer.phar update vendor/*
Run Code Online (Sandbox Code Playgroud)
  • --prefer-source:从source可用时开始安装软件包.
  • --prefer-dist:从dist可用时开始安装软件包.
  • -忽略平台的请求数:忽略php,hhvm,lib-*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自动加载转换为classmap以获得更快的自动加载器.这建议特别适用于生产,但可能需要一些时间才能运行,因此默认情况下目前尚未完成.
  • --lock:仅更新锁定文件哈希,以禁止有关锁定文件过期的警告.
  • --with-dependencies:将白名单包的所有依赖项添加到白名单.
  • --prefer-stable:首选稳定版本的依赖项.
  • --prefer-lowest:首选最低版本的依赖项.用于测试通常使用的最低版本的需求--prefer-stable.


Ada*_*dam 25

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

假定以下情况:

composer.json

"parsecsv/php-parsecsv": "0.*"
Run Code Online (Sandbox Code Playgroud)

composer.lock文件

  "name": "parsecsv/php-parsecsv",
            "version": "0.1.4",
Run Code Online (Sandbox Code Playgroud)

最新版本是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文件也会被更新。

  • 正是我正在寻找的。解释得很好。`已投赞成票` (2认同)
  • tnx。我从来不知道“composer require”也会将包更新到最新版本。 (2认同)

Wol*_*ack 18

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

composer update vendor-name/module-name --with-dependencies
Run Code Online (Sandbox Code Playgroud)


Mos*_*afa 11

只需使用

composer require {package/packagename}
Run Code Online (Sandbox Code Playgroud)

喜欢

composer require phpmailer/phpmailer
Run Code Online (Sandbox Code Playgroud)

如果包不在供应商文件夹中.. composer 安装它,如果包存在,composer 将包更新到最新版本。


orh*_*tlu 10

您基本上可以执行以下操作来安装新软件包.

php composer.phar require
Run Code Online (Sandbox Code Playgroud)

然后终端会要求您输入要搜索的包的名称.

$ Search for a package []: //Your package name here
Run Code Online (Sandbox Code Playgroud)

然后终端会询问包的版本(如果你想要最新的版本,请留空)

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

然后你只需按返回键.终端会要求另一个包裹,如果您不想再安装另一个包裹,只需按回车键即可完成.


Tso*_*abe 6

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

php composer.phar update vendor/package
Run Code Online (Sandbox Code Playgroud)

  • 你会在这篇文章中找到同样的建议:https://github.com/composer/composer/issues/3112。PS:不加解释的投反对票太容易了,没用。 (4认同)

The*_*Anh 5

因为您想安装特定的包“我只需要为我的 SF2 发行版 (DoctrineFixtures) 安装 1 个包”。

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