首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Satis修复composer错误“未知下载程序类型: vcs”

使用Satis修复composer错误“未知下载程序类型: vcs”
EN

Stack Overflow用户
提问于 2021-06-14 22:27:54
回答 1查看 139关注 0票数 0

最近,当我将composer升级到最新版本(2.1.3)时,我开始在运行composer update时遇到问题。

我得到的实际错误是:

代码语言:javascript
复制
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配置似乎会生成vcs repos,但我找不到可以更改这一点的配置项(我只在构建satis包时使用git repos )。我也不知道如何在我的composer安装中添加vcs功能。

我的satis配置如下:

代码语言:javascript
复制
{
        "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
}

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

EN

回答 1

Stack Overflow用户

发布于 2021-06-14 22:27:54

让我们首先说明,即使在安装了unzip之后,也没有修复任何东西。

经过一系列的调试之后,我发现这个逻辑是slightly changed in 2.1.0

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

到目前为止,我已经找到了一些“修复”,但它们实际上更多的是hack而不是实际的修复。

composer.json文件添加preferred-install

如果添加config.preferred-install的composer.json条目,还可以避免此新行为:

代码语言:javascript
复制
{
    "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

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

代码语言:javascript
复制
composer self-update 2.0.14

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

注意::请不要运行旧版本的软件,除非万不得已。

最后一招

如果其他方法都不起作用,您通常可以通过强制composer从源代码获取来使其正常工作。只需使用composer update --prefer-source即可。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67972125

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档