php – 如何将作曲家依赖从require-dev移动到require?
我的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" } } 到目前为止一切顺利:作曲家安装和作曲家更新按预期运行,安装依赖项,我可以在供应商/中看到它 现在,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确实有效,但要求却没有.对这里可能出错的任何建议?
require-dev不是开发依赖项的地方.它适用于仅在开发中使用的软件,如PHPUnit,Mockery等,或者用于自身有用的依赖项,但在这种情况下仅用于开发,如软件包所针对的服务的客户端库(如在测试场景中提出一些真实的请求).
所以你的图书馆从一开始就不应该是“require-dev”. 另一件事是:如果使用适当的分支和标签,Composer将扣除版本,即您的存储库中名为“1.0.x”的分支将被检测为所有1.0版本的开发分支,并且对此类版本的任何要求可能是这个分支是否满意 – 如果您通过设置“最小稳定性”允许开发版本:“dev”(这将允许所有软件的开发版本 – 相当无意),或者当您需要版本“1.0.0@dev”时你的软件. 目前可能破坏你的作曲家设置的一件事是你明确提到了librarys composer.json中的一个版本,这是一个开发版本.你删除了那个版本指标吗?您应该删除它,因为如果Composer可以从存储库中的标记检测版本,而不是通过在composer.json中明确提到它们,则生活会更容易. 最后请确保在使用Git时使用适当的版本标记提交.所需的版本应与git标记的版本相对应. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |