我在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一个版本号将表明它是稳定的,但鉴于上面的文件,这显然不起作用。我做错了什么?
答案 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包,并明确包含此包。
这样做太麻烦了。标记您的软件,即使它不是语义的,您也可以。