遇到作曲家的问题。我有一个主要的项目,我正在建立一些我建立的小型库,我希望在我的项目之间更容易地分享。它们还没有准备好发布,所以我不想将它们添加到packagist,但是当我需要1时需要另一个,它会出错,除非我在我的主composer.json上自定义存储库
另外,第三级要求无法解析包装库
Your requirements could not be resolved to an installable set of packages.
Problem 1
- ethereal/simpleCache dev-master requires predis/predis ^1.1@dev -> no matching package found.
- ethereal/simpleCache dev-master requires predis/predis ^1.1@dev -> no matching package found.
- Installation request for ethereal/simplecache dev-master -> satisfiable by ethereal/simpleCache[dev-master].
主要项目composer.json:
{
"name": "ethereal/SimpleTable",
"type": "project",
"repositories": [
{
"type": "vcs",
"url": "https://github.com/mathus13/SimpleConfig.git"
}
],
"require": {
"php": ">=5.3.9",
"doctrine/dbal": "^2.6@dev",
"ethereal/SimpleConfig": "dev-master"
},
"require-dev": {
"phpunit/phpunit": "~4.8"
},
"autoload": {
"psr-4": {
"Ethereal\\": "lib"
}
}
}
配置库:在SimpleTable中运行composer update时,除非SimpleTable明确要求,否则不会包含Simple Cache。
{
"name": "ethereal/SimpleConfig",
"type": "project",
"version": "0.0.1",
"repositories": [
{
"type": "vcs",
"url": "https://github.com/mathus13/SimpleCache.git"
}
],
"require": {
"php": ">=5.3.9",
"ethereal/SimpleCache": "dev-master"
},
"require-dev": {
"phpunit/phpunit": "~4.8"
},
"autoload": {
"psr-4": {
"Ethereal\\": "lib"
}
}
}
缓存库:在SimpleTable中运行composer update时,无法解析predis。
{
"name": "ethereal/simpleCache",
"type": "project",
"version": "0.0.1",
"require": {
"predis/predis": "^1.1@dev",
"php": ">=5.3.9"
},
"require-dev": {
"phpunit/phpunit": "~4.8"
},
"autoload": {
"psr-4": {
"Ethereal\\": "lib"
}
}
}
答案 0 :(得分:3)
ethereal/SimpleTable
取决于ethereal/SimpleConfig
的开发稳定性,这取决于开发稳定性中的ethereal/SimpleCache
,这取决于开发稳定性中的predis/predis
(版本1.1没有' t已被释放。)
主包中包含的包不能定义任何稳定性,唯一允许的稳定性是主包中的包。这就是"稳定"默认情况下。
根据" dev-master"你从这条规则中做了一个例外。对于SimpleConfig",但这不是继承的。
您有多种解决方案:
"minimum-stability":"dev"
添加到主composer.json
,但这也允许从分支机构安装所有其他软件包。然而,使用分支是一件非常糟糕的事情,因为您无法轻松返回到更新之前正在运行的版本 - 分支指针仅向前移动。只有标签会永远指向同一个软件。"prefer-stable":true"
是3针对已在稳定版本中提供的软件包引入的问题的某种解决方法。但是你仍然有一个问题,就是无法回到你自己的包装上。早期版本,因为您正在使用分支。如果您仍在开发这些软件包,则可能需要依赖分支。但是,一个好的软件包将能够独立开发和测试,除了接口定义(将用于模拟所有内容)之外几乎没有任何外部代码,所以通常将所有代码放在一起,并通常检查出分支的repos是一个编写代码的邀请函,这些代码并没有完全分开。
如果已经完成了这些包中的任何一个(我说"足够好"),请标记它并依赖于该版本而不是分支。如果发现错误或想要添加新功能,您可以随时发布新版本。