如何指定Composer包稳定性?

时间:2015-10-15 22:10:49

标签: php composer-php

我在Bitbucket上有一个git存储库,它是一个支持Composer的包(包含一个看起来像这样的composer.json):

{
    "name": "foo/package",
    "version": "0.0.1"
}

我有另一个有这个composer.json的项目:

{
    "name": "foo/project",
    "repositories": [
        {
            "type": "vcs",
            "url": "[bitbucket git url]",
        }
    ],
    "require": {
         "foo/package": "*"
    }
}

如果我尝试运行composer install,我会收到一条错误消息:

Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - Installation request for foo/package * -> satisfiable by foo/package[dev-master].
    - Removal request for foo/package == 9999999-dev

如果我将以下行添加到项目的composer.json中,则错误消失并且包安装正确。

"minimum-stability": "dev"

我理解Composer不认为foo/package是稳定的,这就是为什么它说无法找到它,添加“最小稳定性”行告诉它foo/package没问题安装。但我不知道如何告诉Composer foo/package 是稳定的。

将所需版本设置为0.0.1而不是*也不起作用,它只是给了我这个错误:

 Problem 1
- The requested package stashimi/crawler 0.0.1 could not be found.

我发现了另一个Stack Overflow问题,这意味着给foo / package一个版本号将表明它是稳定的,但鉴于上面的文件,这显然不起作用。我做错了什么?

2 个答案:

答案 0 :(得分:3)

好的,我想出了自己的问题。基本上,在使用VCS存储库时,它会查找具有给定需求版本的标记。在我的情况下,由于我的仓库中没有标记0.0.1,因此Composer无法找到它。在repo中创建该标签解决了这个问题。

另一种(可能更正确)解决方法是制作所需的版本dev-master,这基本上意味着“在存储库中使用master分支。” (或者任何分支; Composer关于dev-X版本规范的文档有点令人困惑。)

答案 1 :(得分:1)

创建稳定版本的唯一方法是标记它。使用semantic versioning是一个非常好的主意,这意味着一个非常稳定的版本从版本1.0.0开始。所有零版本在语义版本控制中都被认为是实验性的和不稳定的,但Composer会认为这些标签是稳​​定的。但是,代字号运算符(不处理零版本不同)和插入符号运算符(确实如此)之间存在差异。

避免依赖分支机构!从长远来看,它会破坏您的软件,因为分支机构不会指向软件包的某个特定状态,而是指向随时间变化的正在进行的工作。使用它很痛苦,最终无法更新任何内容。别走那条路!

顺便说一下:使用分支是" dev"稳定性,如果你的软件需要一个需要分支的软件包,这将无法工作 - 你必须在主软件中允许dev稳定性,这是最小稳定性:dev"对于您使用的所有包(即使您可以" prefer-stable:true"),或者您手动找出正在使用的dev-stable包,并明确包含此包。

这样做太麻烦了。标记您的软件,即使它不是语义的,您也可以。