![](/img/trans.png)
[英]How do I move some dependecies from require to require-dev with composer?
[英]How to move composer dependency from require-dev to 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"
}
}
至此一切顺利: composer install
和composer 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.json中明确提到了一个版本,这是一个开发版本。 您是否已删除该版本指示器? 您应该删除它,因为如果Composer可以从存储库中的标记中检测版本,则生活会更轻松,而不是通过在composer.json中明确提及这些标记来实现。
最后,请确保使用Git时使用适当的版本标记提交 。 require
d版本应与git标签版本相对应。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.