如何将composer依赖关系从require-dev转移到require



我的git repo服务器上有两个项目。第一个是我写的一个库,我们称之为foo/lib-bar。第二个是使用该库CCD_ 2的应用程序。目前该库处于开发版本,因此该库的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 installcomposer update都按预期运行,安装依赖项,我可以在vendor/中看到它

现在,医生说

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,得到:

$ 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不起作用。关于这里可能出了什么问题,有什么建议吗?

require-dev不是开发依赖关系的地方。它适用于仅在开发中使用的软件,如PHPUnit、Mockery等,或用于本身有用的依赖项,但在这种情况下仅用于开发,如软件包所涉及服务的客户端库(在测试场景中发出一些真实请求)。

因此,您的库从一开始就不应该是"require-dev"。

另一件事是:如果使用适当的分支和标记,Composer将扣除版本,即存储库中名为"1.0.x"的分支将被检测为所有1.0版本的开发分支,该分支可能会满足对此类版本的任何要求,前提是您通过设置"minimum-stability": "dev"(这将允许所有软件的开发版本——相当意外)或当您的软件需要"1.0.0@dev"版本时允许开发版本。

目前可能会破坏composer设置的一件事是,您在库composer.json中明确提到了一个版本,这是一个开发版本。你去掉版本指示器了吗?您应该删除它,因为如果Composer能够从存储库中的标签中检测到版本,而不是在Composer.json.中明确提及它们,那么生活会更轻松

最后,请确保在使用Git时,您用适当的版本标记提交required版本应与带git标记的版本相对应。

相关内容

  • 没有找到相关文章

最新更新