私有作曲家包 - 没有找到有效的composer.json

Jam*_*mes 12 php package-managers composer-php

我正在尝试使用作曲家加载我在BitBucket上托管的库,如官方文档此处所述,但仍然收到以下错误:

[Composer\Repository\InvalidRepositoryException]
No valid composer.json was found in any branch or tag of [repository URL], could not load a package from it.
Run Code Online (Sandbox Code Playgroud)

这是我的项目 composer.json:

{
    "name": "Project name",
    "require": {
        "my-vendor/my-package": "dev-master"
    },
    "repositories": [
        {
            "type": "vcs",
            "url": [repository URL]
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

这是我的远程存储库中的composer.json(显然无法找到):

{
    "name": "my-vendor/my-package",
    "version": "0.3",
    "autoload": {
        "psr-0": {
            "NS_": "src"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我应该提一下,两个composer.json文件都应该在根目录中.

其他一些注意事项:

我还尝试了"非作曲家包"方法,我在项目composer.json中指定了包信息,并省略了远程存储库中的composer.json,如文档中所述.这成功克隆了主分支,但随后导致以下错误:

[RuntimeException]
Failed to execute git checkout "master" && git reset --hard "master"

fatal: Not a git repository (or any of the parent directories): .git
Run Code Online (Sandbox Code Playgroud)

但是,程序包会按预期下载到/ vendor,因此我不确定为什么它会再次尝试检出master.

这不是我希望解决这个问题的方式(因为我宁愿在远程存储库中使用composer.json),但它可能有助于在其他地方识别问题.

谢谢你的帮助.

编辑

我通过HTTP引用package.json设法让它工作:

"repositories": [
    {
        "type": "composer",
        "url": "http://localhost/packages.json"
    }
]
Run Code Online (Sandbox Code Playgroud)

packages.json看起来像:

{
    "packages": {
        "vendor/my-package": {
            "dev-master": {
                "name": "vendor/my-package",
                "version": "dev-master",
                "source": {
                    "url": [repository URL],
                    "type": "git",
                    "reference": "master"
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这是使这个工作的唯一方法吗?如果我只使用一个或两个内部包,那么托管我自己的packages.json文件似乎有点过分.

无论如何,这给了我与之前提到的相同的Git错误.

编辑2

强制错误(无效的SSH密码)会给出:

[RuntimeException]
Failed to execute git clone "[repository URL]" "C:\workspace\DFv3\vendor\vendor/my-package" && cd /D "C:\workspace\DFv3\vendor\vendor/my-package" && git remote add composer "[repository URL]" && git fetch composer
Run Code Online (Sandbox Code Playgroud)

所以我可以清楚地看到它在这里做了什么.但是,此命令运行,它似乎cd进入.git目录并尝试运行:

git checkout "master" && git reset --hard "master"
Run Code Online (Sandbox Code Playgroud)

大概要摆脱它拉动的作曲家实例.但是,它在错误的目录中运行它,我无法弄清楚为什么..

Sve*_*ven 7

version如果它实际上由受支持的源控制系统管理,则不得在库的composer.json中包含规范.目前你说你的主分支是版本0.3(这是一个稳定的版本),但你试图包括"dev-master"(这是一个不稳定的版本).如果该软件确实是"dev-master"或"version 0.3",那么Composer可能会感到困惑.

如果您实际在主分支中为0.3.x系列开发新版本,则应该定义分支别名.将其添加到当前版本0.3.x的开发分支中:

"extra": {
    "branch-alias": {
        "dev-master": "0.3.x-dev"
    }
}
Run Code Online (Sandbox Code Playgroud)

如果你想继续使用版本0.4或1.0,你将使用名为"0.3.x"的分支在0.3系列的"最后"状态进行分支,然后将master分支中的composer.json更新为指向dev-掌握一个新的别名(比如"dev-master": "0.4.x-dev").您也可以为您喜欢的旧0.3分支命名,然后为THAT分支添加别名.

这样做可以使您需要0.3.x的最新开发版本,如下所示:

"require": {
    "my-vendor/my-package": "0.3.*@dev"
}
Run Code Online (Sandbox Code Playgroud)

这将拉出最新的0.3版本 - 由于定义的别名,目前这将是主分支中的最新提交.

您当前设置的方式强制您明确包含版本0.3,这是一个移动目标,而不会明确知道该事实.

仅当没有可用的版本控制系统能够为Composer提供版本号,即没有可用的标签,或者标签不符合Composer对版本号的要求时,才应提供显式版本标签.由于您似乎控制了那些vcs,因此使标签符合Composers标准可能是个好主意,而不是让发布新版本很麻烦.

修复此问题后,我确实希望您的安装不再需要package.json文件,因为该文件现在修复了您使用该版本声明创建的问题.那时你也不再需要那个作曲家参考,但可以像你一样回到提到原始的存储库.

如果您觉得自己使用的私有存储库太多而需要更多的私有存储库,并且不想在长列表中提及它们,那么您可以考虑使用Satis创建这样的已找到包的列表而不是手动创建它们.


Ald*_*dee 6

我知道这有点旧,但对于一些可能会遇到这个问题的人来说,这就是它的工作原理。

清除作曲家缓存。

composer clearcache

重新运行 satis 构建脚本。


tas*_*ski 5

我有同样的错误,从vcs删除文件夹后一切正常

sudo rm -R ~/.composer/cache/vcs/*
Run Code Online (Sandbox Code Playgroud)

在 Windows 上(如@Serbu 建议的那样):

清除 C:\Users\Me\AppData\Local\Composer\ 下的 vcs、repo 和 files 目录


Jam*_*mes 3

我已经设法通过引用 HTTP 来让它工作package.json

"repositories": [
    {
        "type": "composer",
        "url": "http://localhost/packages.json"
    }
]
Run Code Online (Sandbox Code Playgroud)

所以packages.json文件看起来像:

{
    "packages": {
        "vendor/my-package": {
            "dev-master": {
                "name": "vendor/my-package",
                "version": "dev-master",
                "source": {
                    "url": [repository URL],
                    "type": "git",
                    "reference": "master"
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

另外,我为命令提示符设置的自动运行注册表项似乎干扰了作曲家的运行。

请参阅:要求私有 git Bitbucket 存储库无法找到有效的composer.json