【问题标题】:Can you specify a specific version of Composer in the schema?您可以在架构中指定特定版本的 Composer 吗?
【发布时间】:2022-01-07 20:51:02
【问题描述】:

上下文:我正在与一个 PHP 项目团队合作,我们刚刚遇到了一个问题,即来自另一个团队成员的代码审查修改了 composer.lock 文件中所有 time 字段的格式。原来他使用的是更旧版本的作曲家,它以不同的格式输出 time 字段。一旦他更新了重新安装的包,这些字段保持不变。

有没有办法指定 Composer 的最低版本,要求所有参与项目的团队成员使用最低版本以避免此类问题。如果我们没有发现这个问题,composer.lock 文件就会在任何时候由具有不同作曲家版本的人安装新包时发生这种不必要的更改

【问题讨论】:

  • 通过设置一个特定的标签来锁定你在 composer.json 中的包版本。
  • 我的意思不是锁定软件包版本。我的意思是锁定正在使用的 Composer 本身的版本。

标签: php composer-php


【解决方案1】:

您可以创建将在每次更新之前调用的脚本,如果 composer 版本太旧则抛出异常。

composer.json:

"scripts": {
    "pre-update-cmd": [
        "ComposerVersionCheck::check"
    ]
}

版本检查的简单类:

class ComposerVersionCheck {

    public static function check() {
        if (version_compare(\Composer\Composer::VERSION, '1.7.0', '<')) {
            throw new \Exception(
                'Your Composer version (' . \Composer\Composer::VERSION . ') is too old,'
                . ' 1.7.0 or higher is required.'
            );
        }
    }
}

【讨论】:

    【解决方案2】:

    有两种可能:

    • 要么签入composer.phar,以确保每个人都使用相同版本的composer
    • 通过运行composer self-update 保持composer 本身随时更新,以确保每个人都使用最新版本的composer

    无论如何,由于composer 会随着时间而变化,您可能仍然会遇到同样的问题。

    【讨论】:

      【解决方案3】:

      您可以在 composer.json 中执行此操作:

      "require": {
          "composer": "^2.2",
          [...]
      }
      

      注意:如果composer update,但不会阻止composer install,因此它不会确保Composer在部署服务器和团队机器中是最新的,但它会阻止composer.lock被更改按旧版本。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-04
        • 2020-05-27
        • 1970-01-01
        • 2018-12-21
        • 1970-01-01
        相关资源
        最近更新 更多