【问题标题】:Load composer dependencies of private git repository加载私有 git 仓库的 composer 依赖
【发布时间】:2018-05-07 22:17:11
【问题描述】:

我有点困惑 Composer 如何加载私有存储库项目的依赖项。我找到了这个链接,但我不确定 this comment 是指 nested 存储库还是只是存储库的任何依赖项。为了澄清我的情况:

  1. 我有一个私有 git 存储库,我正尝试将其添加为项目的依赖项。
  2. 私有 git 存储库也是一个 composer 项目,其中包含一个 composer.json,它需要公开可用的包。

我的 composer.json 中有以下代码用于该项目。

"repositories": [
    {
        "type": "package",
        "package": {
            "name": "{vendor}/{package-name}",
            "version": "{arbitrary-version}",
            "type": "package",
            "source": {
                "url": "git@github.com:{github-username}/{github-repository}.git",
                "type": "git",
            }
        }
    }
]
"require": {
    "{vendor}/{package-name}": "^0.0.1"
}

因此,如果我在这些更改之后对项目执行composer update,它将成功从私有存储库下载我的包,但它不会触发对私有存储库的 composer.json 的检查/更新 - 所以没有vendor 文件夹已创建且未安装关键依赖项。私有仓库 composer.json 如下:

{
    "name": "{vendor}/{package-name}",
    "description": "{removed}",
    "type": "library",
    "require": {
        "illuminate/database": "^5.6",
        "chumper/zipper": "1.0.x",
        "symfony/debug": "^4.0",
        "vlucas/phpdotenv": "^2.4"
    },
} 

所以我的问题是,我想通过作曲家使用私有存储库实现什么,如果是这样,有人知道我哪里出错了吗?

【问题讨论】:

    标签: composer-php


    【解决方案1】:

    package 类型用于非作曲家依赖。如果使用这种类型,Composer 甚至不会在已定义的包源中查找 composer.json 文件,您需要在项目 composer.json 中的包声明中包含有关包的所有必需信息:

    "repositories": [
        {
            "type": "package",
            "package": {
                "name": "{vendor}/{package-name}",
                "description": "{removed}",
                "type": "library",
                "require": {
                    "illuminate/database": "^5.6",
                    "chumper/zipper": "1.0.x",
                    "symfony/debug": "^4.0",
                    "vlucas/phpdotenv": "^2.4"
                },
                "version": "{arbitrary-version}",
                "source": {
                    "url": "git@github.com:{github-username}/{github-repository}.git",
                    "type": "git",
                }
            }
        }
    ]
    

    但在您的情况下(您有一个带有正确composer.json 的包)您应该使用vcs 类型:

    "repositories": [
        {
            "type": "git",
            "url": "git@github.com:{github-username}/{github-repository}.git"
        }
    ]
    

    【讨论】:

    • 非常感谢您的帮助,我知道我可能做错了一些简单的事情。我知道这超出了我最初问题的范围,但不幸的是,在 composer install 从我的仓库中安装所有包之后,现在在 composer update 进程的最后,但是当它安装/克隆实际的存储库时,它会吐出:“{package }/{name}": "dev-master" }, "repositories": [ { "type": "vcs", "url": "git@github.com:{username}/{repo}.git", "no-api": true } ] 我也在使用 --prefer-source 标志,所以不知道为什么它仍在尝试使用 dist?
    • 如果有帮助,请提供更多信息:现在尝试从 dist 下载-安装 {package}/{repo} (dev-master acb616e) 下载:失败 [Composer\Downloader\TransportException]“ api.github.com/repos{username}/{repo}/zipball/acb616ee90ef5715641c7b91373d4c0613d9749b”文件无法下载(HTTP/1.1 404 Not Found)
    • @XanT 尝试在类型声明中将vcs 更改为git
    • 不走运,但您帮助我解决了我的主要问题,因此我已将其标记为已接受。将其从 vcs 更改为 git 确实将其从传输异常更改为运行时异常,但相同的消息仍然存在。我将不得不进行更多调试,感谢您的帮助。
    • @XanT 你可以尝试删除vendor目录和composer.lock文件。并清除作曲家缓存:composer clearcache。我不确定为什么它不适用于git 作为一种类型,也许它与缓存有关。
    猜你喜欢
    • 2016-06-12
    • 1970-01-01
    • 2016-11-14
    • 2022-08-20
    • 2018-06-16
    • 2021-01-03
    • 2016-11-02
    • 2017-03-29
    相关资源
    最近更新 更多