我已经尝试解决这个问题很长一段时间了,但仍然不知道我的错误是什么。
我有两个存储库要合并。应用程序和框架核心。
// Application
- composer.json
- public/
- CCF/
- core/ <- here the core package should go
- vendor/ <- here it goes instead
现在,基本上我想创建一个composer包,将其安装到CCF/core/
而不是CCF/vendor/clancats/core/etc..
中
所以我创建了一个自定义安装程序:
vendor/composer/installers/src/Composer/Installers/ClanCatsFrameworkInstaller.php
class ClanCatsFrameworkInstaller extends BaseInstaller
{
protected $locations = array(
'core' => 'CCF/core/',
'orbit' => 'CCF/orbit/{$name}/',
);
}
核心的composer.json
{
"name": "clancats/core",
"description": "The ClanCatsFramework Core repository",
"type": "clancatsframework-core",
"license": "MIT",
"require": {
"php": ">=5.3",
"composer/installers": "~1.0"
}
}
应该在CCF/core实现核心的应用程序的composer.json
{
"type": "project",
"require": {
"php": ">=5.3",
"clancats/core": "dev-master"
},
"config": {
"vendor-dir": "CCF/vendor"
},
}
但毕竟composer仍然将核心包安装在/vendor/crancats/等位置。。
所以我的问题是,composer不将核心包安装到CCF/core/,我的错误是什么?
- 已将composer/installers添加到requires
- 我创建了一个自定义安装程序,它定义了核心的路径
- 将核心包的类型设置为我的自定义类型
另一个萦绕在我脑海中的问题是,我的模式错了吗?我的意思是我误解了如何使用composer吗?
Github:
- 框架安装回购:https://github.com/ClanCats/Framework
- 核心回购:https://github.com/ClanCats/Core
感谢你们的帮助:)
因此,对于遇到相同问题的每个人:
我的错误是我不需要主存储库中的composer/installers
。
两个存储库中都需要composer安装程序
所以在这种情况下:
{
"type": "project",
"require": {
"php": ">=5.3",
"clancats/core": "dev-master",
"composer/installers": "~1.0"
},
"config": {
"vendor-dir": "CCF/vendor"
},
}
解决了问题。