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)
大概要摆脱它拉动的作曲家实例.但是,它在错误的目录中运行它,我无法弄清楚为什么..
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创建这样的已找到包的列表而不是手动创建它们.
我有同样的错误,从vcs删除文件夹后一切正常
sudo rm -R ~/.composer/cache/vcs/*
Run Code Online (Sandbox Code Playgroud)
在 Windows 上(如@Serbu 建议的那样):
清除 C:\Users\Me\AppData\Local\Composer\ 下的 vcs、repo 和 files 目录
我已经设法通过引用 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。
| 归档时间: |
|
| 查看次数: |
13804 次 |
| 最近记录: |