0

最近,当我将 composer 升级到最新版本 (2.1.3) 时,我开始在运行时拉下我们的 satis 存储库时遇到问题composer update

我得到的实际错误是:

usr@srv ~/test $ composer update
Loading composer repositories with package information
Updating dependencies
Nothing to modify in lock file
Installing dependencies from lock file (including require-dev)
Package operations: 87 installs, 0 updates, 0 removals
As there is no 'unzip' nor '7z' command installed zip files are being unpacked using the PHP zip extension.
This may cause invalid reports of corrupted archives. Besides, any UNIX permissions (e.g. executable) defined in the archives will be lost.
Installing 'unzip' or '7z' may remediate them.
  - Syncing company/satis-company-lib (dev-master 349679e) into cache


  [InvalidArgumentException]
  Unknown downloader type: vcs. Available types: git, svn, fossil, hg, perforce, zip, rar, tar, gzip, xz, phar, file, path.

这个错误的原因是什么?我意识到它在抱怨解压缩,但为什么会突然开始发生这种情况?

我的 satis 配置似乎生成了vcsrepos,但我找不到配置条目来更改它(我只git在构建我的 satis 包时使用 repos)。我也不知道如何将该vcs功能添加到我的作曲家安装中。

我的满意配置如下所示:

{
        "name": "Company PHP Repository",
        "homepage": "https://satis:examplepw@packages.company.com",
        "repositories": [
                {
                        "type": "git",
                        "url": "https://satis:examplepw@source.company.com/company/company-lib-php.git"
                },
                {
                        "type": "git",
                        "url": "https://satis:examplepw@source.company.com/company/company-lib-yii-php.git"
                }

        ],
        "require-all": true,
        "archive": {
                "directory": "dist",
                "format": "zip",
                "prefix-url": "https://satis:examplepw@packages.company.com"

        },
        "require-dependencies": true,
        "require-dev-dependencies": true
}

我猜这与“存档”部分没有生成正确的 dist 包有关,但我不确定。

4

1 回答 1

0

让我们首先说即使安装后unzip也没有任何问题。

经过一堆调试,我发现这个逻辑在 2.1.0 中略有改变

UX 更改:包的默认安装方法现在始终是 dist/zip,即使对于开发包,如果您想要旧的行为,添加 --prefer-install=auto (#9603)

到目前为止,我发现了一些“修复”,但它们实际上比实际修复更多。

添加preferred-install到您的composer.json文件

如果您添加 composer.json 条目,config.preferred-install您也可以避免这种新行为:

{
    "name": "foo/bar",
    "require": {
        "foocompany/lib": "dev-master"
    },
    "repositories": [
        {
            "type": "composer",
            "url": "https://source.companywebsite.com"
        }
    ],
    "config": {
        "preferred-install": {
            "*": "auto"
        }
    }
}

您可以使用完整的包名称 ( "foocompany/lib": "auto")、前缀 ( "foocompany/*": "auto") 或使用开始 ( "*": "auto") 的所有包。

运行带有标志的命令

您可以简单地调用composer update --prefer-install=auto而不是调用composer update,但这显然不能解决调用时出现的问题composer update

恢复到旧版本的作曲家

您始终可以使用composer self-update <version>. 如果降级到 2.1.0 之前的版本,您可以安装2.0.14

composer self-update 2.0.14

在此之后,您可以composer update像以前一样运行而不会出现任何问题。

注意:除非绝对必要,否则请不要运行旧版本的软件。

最后一招

如果没有其他工作,您通常可以通过强制作曲家从源中获取来使其工作。只需使用composer update --prefer-source.

于 2021-06-14T14:27:53.760 回答