Composer Satis Repository 似乎指的是源 URL 而不是 dist URL

Posted

技术标签:

【中文标题】Composer Satis Repository 似乎指的是源 URL 而不是 dist URL【英文标题】:Composer Satis Repository seems to be referring to source URL rather than dist URL 【发布时间】:2017-09-14 10:48:53 【问题描述】:

我有一个设置了基本 HTTP 身份验证的 Satis 服务器。

配置文件如下所示:


    "name": "MySatisServer",
    "homepage": "https:\/\/satis.example.co.uk",
    "repositories": [
        
            "type": "git",
            "url": "git@github.com:Org\/Repo1.git"
        ,
        
            "type": "git",
            "url": "git@github.com:Org\/Repo2.git"
        ,
        
            "type": "git",
            "url": "git@github.com:Org\/Repo3.git"
        ,
        
            "type": "git",
            "url": "git@github.com:Org\/Repo4.git"
        
    ],
    "require-all": true,
    "require-dependencies": true,
    "require-dev-dependencies": true,
    "archive": 
        "directory": "dist",
        "format": "zip",
        "prefix-url": "https://satis.example.co.uk"
    

我已经运行了 satis 构建,它使用看起来正确的 packages.json 文件创建了我的 dist 目录。

我可以在浏览器中转到https://satis.example.co.uk 并下载我想要的任何版本的存储库作为 ZIP,它工作正常。

当我尝试通过 composer 使用 repo 时出现问题。

我的composer.json 文件如下所示:


    "name": "some/project",
    "description": "",
    "license": "proprietary",
    "authors": [],
    "require": 
        "org/repo-4": "^1.0"
    ,
    "repositories": [
        
            "type": "composer",
            "url": "https://satis.example.co.uk"
        
    ]

由于 Satis 服务器支持基本 HTTP 身份验证,因此我还有一个 auth.json 文件,如下所示:


    "http-basic": 
        "satis.example.co.uk": 
            "username": "my-username",
            "password": "my-password"
        
    

运行composer install 会得到以下输出:

- Installing org/repo-4 (1.0.0): Downloading (failed)    Failed to download org/repo-4 from dist: The "https://api.github.com/repos/Org/Repo4/zipball/128f63b6a91cf71d5cda8f84861254452ff3a1af" file could not be downloaded (HTTP/1.1 404 Not Found)
Now trying to download from source
- Installing org/repo-4 (1.0.0): Cloning failed using an ssh key for authentication, enter your GitHub credentials to access private repos
Head to https://github.com/settings/tokens/new?scopes=repo&description=Composer+on+box359.localdomain+2017-04-18+1416
to retrieve a token. It will be stored in "/home/ubuntu/CashbackEngine/auth.json" for future use by Composer.
Token (hidden):

从上面可以看出,它完全忽略了它需要下载的文件位于https://satis.example.co.uk/dist/org/repo-4/repo-4-1.0.0-e1cd03.zip,而是直接跳转到GitHub的源代码中尝试获取,这不是我们想要的结果,因为它是一个私有 GitHub 存储库。

看起来它甚至没有意识到有不同的 dist 版本可用。

我的设置有问题吗?

感谢任何帮助。

【问题讨论】:

【参考方案1】:

问题与composer.lock 文件有关。

虽然 Satis 上的 dist URL 是正确的,但 composer 甚至没有注意它,因为 composer 锁定文件已经缓存了 GitHub 上的旧 dist url。

解决方案是删除composer.lock 文件并运行composer install。为了确定,我还事先运行了composer clearcache

【讨论】:

以上是关于Composer Satis Repository 似乎指的是源 URL 而不是 dist URL的主要内容,如果未能解决你的问题,请参考以下文章

Docker搭建内网 composer satis 代码仓库

satis 搭建 Composer 私有库的方法

我可以从我自己的 Composer Satis 安装中同步或镜像来自 packagist.org 的依赖项吗?

安装失败,将 ./composer.json 还原为其原始内容 [Composer\Repository\InvalidRepositoryException]

Composer 抛出 [ReflectionException] Class Fxp\Composer\AssetPlugin\Repository\NpmRepository 不存在

PHP资源大全(上篇)