【问题标题】:How to update a single library with Composer?如何使用 Composer 更新单个库?
【发布时间】:2021-03-25 00:00:13
【问题描述】:

我只需为我的 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吗?
  • 请尝试使用我的答案中提供的命令,否则请提供您遇到的错误的描述(即,如果作曲家抱怨,则作曲家输出)
  • 您的 composer.json 可能引用了一个项目的替代分支。
  • 我在我的 laravel 项目中更新了一个特定的依赖项,并指定了要显式安装的特定组件:composer update laravelcollective/html。这似乎奏效了。

标签: symfony composer-php


【解决方案1】:

要安装 doctrine/doctrine-fixtures-bundle 与版本 2.1.* 和最低稳定性 @dev 使用这个:

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

然后只更新这个单一的包:

composer update doctrine/doctrine-fixtures-bundle

【讨论】:

  • 可能会有所帮助:使用 -vvv 运行更新/安装(详细模式:composer.phar 更新 -vvv 包/包)有时会更好,因为有时会出现交互式提示,否则可能会被隐藏
  • 如果其他包有错误怎么办? (在我的情况下,安装已停止)。
  • require 会触发不同包的更新吗?
  • 您到底想知道什么?你能更具体一点吗?您想知道在运行composer require &lt;package&gt;:&lt;version-constraint&gt;@&lt;stability-flag&gt; 命令时是否会自动更新另一个包 - 之前或之前作为依赖项明确下载的 require'd?
  • > composer.phar 更新学说/doctrine-fixtures-bundle 这也更新了所有其他包(((
【解决方案2】:

如果您只想更新几个包而不是全部,您可以这样列出它们:

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

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

php composer.phar update vendor/*
  • --prefer-source:从source 安装包(如果可用)。
  • --prefer-dist:从dist 安装包(如果可用)。
  • --ignore-platform-reqs:忽略phphhvmlib-*ext-*要求并强制安装,即使本地机器不满足这些要求。另请参阅platform config option
  • --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/*"
【解决方案3】:

安装、更新和要求的区别

假设以下场景:

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
  • @WilliamRandokun 如果你之前安装过,那么composer update package 就足够了,之后不需要调用 install
  • 正是我想要的。很好的解释。 upvoted
  • 恕我直言,这应该是公认的答案,因为它突出了来自 composer.jsoncomposer.lock 的升级约束
  • tnx.我从来不知道composer require 还会将包更新到最新版本。
【解决方案4】:

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

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

【讨论】:

    【解决方案5】:

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

    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 require {package/packagename}
      

      喜欢

      composer require phpmailer/phpmailer
      

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

      【讨论】:

      • 这不会按预期工作,因为它会将库放入composer.json。更新包不需要这样做
      【解决方案7】:

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

      php composer.phar update vendor/package
      

      【讨论】:

      【解决方案8】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多