我正在用Laravel 4开发一个应用程序我必须为它开发一个包,我的包(让我们称之为xPAckage)需要这个包vespakoen / menu,你可以从它的github看到 https://github.com/vespakoen/menu 我必须将它添加到
中的xPackage composer.json require-dev
但问题是这个通过运行composer安装应用程序不会安装其包的require-dev的内容它只安装包的
require part or require-dev
自己的。
如果我把它放在xPAckage的require部分,运行composer update时会出现以下错误,
- The package is not available in a stable-enough version according to your min
imum-stability setting
我应该如何解决这个问题?
编辑:( 11月23日) xPackage composer.json是这样的:
{
"name": "packageName/xPcakge",
"description": "package description",
"keywords": ["xPAckage"],
"authors": [
{
"name": "user",
"email": "email@domain.net"
}
],
"require": {
"php": ">=5.4.0",
"zofe/rapyd": "1.3.*",
"vespakoen/menu": "dev-master"
},
"autoload": {
"classmap": [
"src/controllers",
"src/views",
"src/models"
]
}
}
这是应用程序的composer.json文件,
{
"name": "laravel/laravel",
"description": "The Laravel Framework.",
"keywords": ["framework", "laravel"],
"license": "MIT",
"type": "project",
"require": {
"laravel/framework": "4.2.*"
},
"require-dev": {
"packageName/xPcakge" : "dev-master"
},
"autoload": {
"classmap": [
"app/commands",
"app/controllers",
"app/models",
"app/database/migrations",
"app/database/seeds",
"app/tests/TestCase.php"
]
},
"scripts": {
"post-install-cmd": [
"php artisan clear-compiled",
"php artisan optimize"
],
"post-update-cmd": [
"php artisan clear-compiled",
"php artisan optimize"
],
"post-create-project-cmd": [
"php artisan key:generate"
]
},
"config": {
"preferred-install": "dist"
}
}
答案 0 :(得分:2)
您的包packageName/xPackage
需要vespakoen/menu
分支名称(dev-master
)。当composer导入该包时,它会将其视为具有@dev
标志。因此packageName/xPackage
与dev
的稳定性级别存在依赖关系。当composer尝试导入xPackage
时,它也会加载所有依赖项。但是,当它达到vespakoen/menu
时,它会发现它具有dev
稳定性级别。您的应用由于没有明确设置稳定性,因此级别为stable
。这两个层面发生冲突。你可以:
将应用的稳定性级别降低到dev,不推荐。
这将允许作曲家将任何开发级别的软件包安装到您的
应用程序。在您的应用composer.json
:
{
"minimum-stability": "dev"
}
使用vespakoen/menu
的稳定版本。转到packagist page并选择标记版本。这是首选方法。在您的包composer.json
:
{
"require": {
"vespakoen/menu": "~2.0"
}
}
在您的应用中明确要求vespakoen/menu
。这将告诉作曲家覆盖这一案例的默认最小稳定性。在您的应用composer.json
:
{
"require": {
"vespakoen/menu": "dev-master"
}
}
答案 1 :(得分:1)
看看这里并尝试一些不同的版本: https://packagist.org/packages/vespakoen/menu
Ex:" vespakoen / menu":" 2.0.15"
答案 2 :(得分:1)
永远不要求分支机构!始终需要版本,最好是依赖项的版本范围。
不幸的是,许多安装说明采用了简单的路线,并建议要求“dev-master”作为其版本。这是错误的。
如果项目宣布根据语义版本控制发布新版本,则需要使用代字号运算符(如~2.1
)来满足所需功能的最小版本。这将告诉您至少需要2.1.0版本,但只要不引入不兼容的更改(这将是一个新的主要编号3.0.0),任何更好的都可以。
如果项目未公布此类内容,则2.1.*
的版本要求可能是正确的,如果您有证据表明该项目过去打破了“兼容”版本并且未对此进行更正。这不太可能是这种情况,而且它是更令人讨厌的变体,因为你强迫你自己的用户使用你的依赖的特定版本,而不能自由升级它。