我正在使用Laravel 4开发一个应用程序,我必须为它开发一个软件包,我的软件包(我们称之为xPAckage)需要这个软件包vespakoen/menu,正如你从它的github中看到的那样。https://github.com/vespakoen/menu我必须将其添加到xPackage composer.json中
require-dev
但问题是,通过运行作曲家安装应用程序,它不会安装其软件包的require-dev的内容,它只会安装软件包
require part or require-dev
它自己的。
如果我把它放在xPAckage的要求部分,我在运行作曲家更新时会出现以下错误,
- 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"
}
}
您的软件包packageName/xPackage
需要按分支名称 ( dev-master
) 进行vespakoen/menu
。当作曲家导入该包时,它会将其视为带有@dev
标志。所以packageName/xPackage
与dev
的稳定性水平有依赖关系。当作曲家尝试导入xPackage
时,它也会加载它的所有依赖项。然而,当它击中vespakoen/menu
时,它看到它有一个dev
的稳定性水平。您的应用(由于未显式设置稳定性)具有 stable
级别。这两个层次是冲突的。您可以:
-
不建议将应用的稳定性级别降低到开发。这将允许作曲家将任何开发级别的包安装到您的.app。在应用的
composer.json
中:{ "minimum-stability": "dev" }
-
使用稳定版本的
vespakoen/menu
。转到它的包装师页面并选择标记版本。这是首选方法。在您的包裹composer.json
:{ "require": { "vespakoen/menu": "~2.0" } }
-
要求在应用中显式
vespakoen/menu
。这将告诉作曲家覆盖这一种情况的默认最小稳定性。在应用的composer.json
中:{ "require": { "vespakoen/menu": "dev-master" } }
看看这里并尝试一些不同的版本:https://packagist.org/packages/vespakoen/menu
例如:"vespakoen/menu":"2.0.15"
永远不需要分支!始终需要版本,最好是依赖项的版本范围。
不幸的是,许多安装说明采取了简单的路线,并建议需要"dev-master"作为他们的版本。这是错误的。
如果项目宣布根据语义版本控制发布新版本,则需要满足所需功能的最低版本,并使用波浪号运算符,如 ~2.1
。这将表明您至少需要版本 2.1.0,但只要不引入不兼容的更改(这将是新的主要编号 3.0.0),任何更好的都可以。
如果项目没有宣布类似的东西,如果你有证据证明该项目过去破坏了"兼容"版本并且没有纠正这一点,则版本要求 2.1.*
可能是正确的。这种情况不太可能发生,而且它是更令人讨厌的变体,因为您强迫自己的用户使用特定版本的依赖项,而无法自由升级它。