{ "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" } }
到目前为止一切顺利:作曲家安装和作曲家更新按预期运行,安装依赖项,我可以在供应商/中看到它
现在,the docs说
require# Lists packages required by this package. The package will not be installed unless those requirements can be met.
对于导致问题的步骤:
好吧,我的库已准备好部署并退出开发阶段.在我的应用程序的生产版本中也恰好需要它.我从我的库的composer.json文件中删除了dev后缀,提交并推送文件,并准备好更新应用程序.
使用应用程序的composer.json,我将库依赖项从require-dev部分移动到require并删除dev后缀(所有内容都是复制粘贴的,所以没有拼写错误 – 我已经检查并再次重新检查):
"require-dev": {},"require": { "PHP": ">=5.5.3","foo/lib-bar": ">=1.0.0" }
现在我运行作曲家更新,我得到:
$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确实有效,但要求却没有.对这里可能出错的任何建议?