我有一个项目使用我的另一个GitHub项目作为依赖项。对于该依赖关系,我对Composer配置有两个要求:
composer install --prefer-source
至symlink to my local copy of the dependency,以便可以在依赖项中运行git
命令。composer install --prefer-dist
直接从GitHub存储库进行安装,而无需符号链接。以前,我在composer.json
中使用以下内容来满足第一个要求:
"require": {
"narthur/natlib": "@dev"
},
"repositories": [
{
"type": "path",
"url": "../natlib",
"options": {
"symlink": true
}
}
]
经过一些工作,我想到了这个,它可以满足第二个要求:
"require": {
"narthur/natlib": "@dev"
},
"repositories": [
{
"type": "package",
"package": {
"name": "narthur/natlib",
"version": "2019.06.20",
"dist": {
"type": "zip",
"url": "https://github.com/narthur/natlib/archive/master.zip"
},
"source": {
"type": "path",
"url": "../natlib",
"reference": "master",
"options": {
"symlink": true
}
}
}
}
]
这在CI中效果很好。但是,当我删除本地vendor/
目录和composer.lock
文件并运行composer install --prefer-source
时,出现以下异常:
[LogicException]
的源代码
下载器“ Composer \ Downloader \ PathDownloader”是dist类型的下载器,不能用于下载软件包narthur / natlib-2019.06.20.0
我试图将它们分成两个这样的存储库条目:
{
"type": "path",
"url": "../natlib",
"options": {
"symlink": true
}
},
{
"type": "package",
"package": {
"name": "narthur/natlib",
"version": "2019.06.20",
"dist": {
"type": "zip",
"url": "https://github.com/narthur/natlib/archive/master.zip"
}
}
}
这在本地工作,将依赖关系符号链接,但在CI because Composer stops at the first matching repository entry中失败:
订单在这里很重要。查找软件包时,Composer将从第一个到最后一个存储库进行查找,并选择第一个匹配项。
如何配置Composer使其表现出自己想要的方式,例如在本地--prefer-source
标志将依赖关系符号链接,而在CI中,--prefer-dist
标志将引入存储库?
我发现的信息:
答案 0 :(得分:0)
我意识到我的要求可能是不必要的。由于我的依赖项托管在GitHub上,因此我可以在本地和远程以相同的方式将其拉出,并在其vendor文件夹中对依赖项进行更改,然后从那里推送回GitHub。
这是我现在正在使用的:
"require": {
"narthur/natlib": "@dev"
},
"repositories": [
{
"type": "vcs",
"url": "https://github.com/narthur/natlib"
}
]
进行此转换时遇到的一个难题是,我最初尝试使用软件包类型的存储库,而不是简单的vcs类型的存储库。由于it caused Composer to ignore the dependency's composer.json
file, preventing it from being autoloaded,此操作无效。切换到上面的简单vcs条目后,一切运行正常。