我该如何指定Composer包的稳定性?

3

我在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 不稳定,所以它找不到,加上 "minimum-stability" 可以告诉它可以安装 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个回答

4
好的,我解决了自己的问题。基本上,在使用版本控制系统存储库时,它会查找具有所需版本的标记。在我的情况下,由于我的存储库中没有标记0.0.1,Composer 找不到它。在存储库中创建该标记解决了这个问题。
另一种(可能更正确)的解决方法是将所需版本设置为dev-master,这基本上意味着“使用存储库中的master分支”(或任何分支; Composer关于dev-X版本规范的文档有点令人困惑)。

1
创建稳定版本的唯一方法是打标签。使用语义化版本控制是一个非常好的想法,这意味着真正稳定的版本从1.0.0版本开始。在语义化版本控制中,所有零版本都被认为是实验性的和不稳定的,但是Composer会将这些标签视为稳定的。然而,波浪线运算符(不处理零版本)和插入符号运算符(处理零版本)之间存在差异。
避免依赖分支!长期来看,它会破坏您的软件,因为分支不指向软件包的一个特定状态,而是指向随时间变化的正在进行的工作。这很麻烦,最终使更新任何东西成为不可能。不要那样做!
顺便说一下:使用分支是“dev”稳定性,如果您有一个需要使用分支的软件包,则无法正常工作 - 您必须允许主要软件包使用dev稳定性,这要么是“minimum-stability:dev”用于您使用的所有软件包(即使您可以“prefer-stable:true”),要么手动找出正在使用哪个dev-stable软件包,并明确包含它。

这太麻烦了。给你的软件打标签,即使它不是语义化的,也没问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接