繁体   English   中英

如何将Composer依赖关系从require-dev移到require?

[英]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 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.json中明确提到了一个版本,这是一个开发版本。 您是否已删除该版本指示器? 您应该删除它,因为如果Composer可以从存储库中的标记中检测版本,则生活会更轻松,而不是通过在composer.json中明确提及这些标记来实现。

最后,请确保使用Git时使用适当的版本标记提交 require d版本应与git标签版本相对应。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM