我的git repo服务器上有两个项目。第一个是我写的图书馆,我们称之为foo/lib-bar
。第二个是使用该库foo/app-bar
的应用程序。目前该库处于开发版本,因此库的composer.json
文件如下所示:
{
"name": "foo/lib-bar",
"description": "Bar library",
"version": "1.0.0-dev",
"type": "library",
"require": {
"php": ">=5.4",
"ext-posix": "*"
}
}
应用程序使用此库,因此它包含必要的要求:
{
"name": "foo/app-bar",
"description": "Bar application",
"version": "0.5.0-dev",
"type": "application",
"repositories": [
{
"type": "vcs",
"url": "ssh://user@git.example.com/lib-foo"
}
],
"require-dev": {
"foo/lib-bar": ">=1.0.0-dev",
},
"require": {
"php": ">=5.5.3"
}
}
到目前为止一切顺利:composer install
和composer update
都按预期运行,安装依赖项,我可以在vendor/
现在,the docs说明了
require#
Lists packages required by this package. The package will not be installed unless those requirements can be met.
导致相关问题的步骤:
好的,我的库已准备好部署并退出开发阶段。在我的应用程序的生产版本中也恰好需要它。我从库的dev
文件中删除composer.json
后缀,提交并推送文件,然后准备好更新应用程序。
使用应用程序的composer.json
我将库依赖项从require-dev
部分移动到require
并删除dev
后缀(所有内容都是复制粘贴的,因此没有拼写错误 - 我已经检查并重新检查了一次):
"require-dev": {},
"require": {
"php": ">=5.5.3",
"foo/lib-bar": ">=1.0.0"
}
现在我运行composer update
并获得:
$ composer update
Loading composer repositories with package information
Updating dependencies (including require-dev)
Your requirements could not be resolved to an installable set of packages.
Problem 1
- Installation request for foo/lib-bar >=1.0.0 -> satisfiable by foo/lib-bar[dev-master].
- Removal request for foo/lib-bar == 9999999-dev
我认为它找不到新版本,所以我手动删除了旧库:
$ rm composer.lock
$ rm -rf vendor/foo/
并尝试从头开始安装
$ composer install
但这次它给了我:
Your requirements could not be resolved to an installable set of packages.
Problem 1
- The requested package foo/lib-bar could not be found in any version, there may be a typo in the package name.
似乎 require-dev
确实有效,但require
不能。关于这里可能出现什么问题的任何建议?
答案 0 :(得分:2)
require-dev
不是开发依赖项的地方。它适用于仅在开发中使用的软件,如PHPUnit,Mockery等,或者用于自身有用的依赖项,但在这种情况下仅用于开发,如软件包所针对的服务的客户端库(如在测试场景中提出一些真实的请求。)
所以你的图书馆从一开始就不应该是“require-dev”。
另一件事是:如果使用适当的分支和标签,Composer将扣除版本,即您的存储库中名为“1.0.x”的分支将被检测为所有1.0版本的开发分支此分支可能满足此类版本的任何要求 - 只要您通过设置"minimum-stability": "dev"
(允许所有软件的开发版本 - 相当无意)或者需要版本{{{}}来允许开发版本。 1}}用于您的软件。
目前可能破坏你的作曲家设置的一件事是你明确提到了librarys composer.json中的一个版本,这是一个开发版本。你删除了那个版本指标吗?您应该删除它,因为如果Composer可以从存储库中的标记检测版本,而不是在composer.json中明确提到它们,则生活会更容易。
最后请确保在使用Git时使用适当的版本标记提交。 "1.0.0@dev"
d版本应对应于git标记版本。