Composer失败,包需要require-dev中的另一个包

时间:2014-11-22 16:23:09

标签: laravel laravel-4 composer-php packages

我正在用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"
 }
}

3 个答案:

答案 0 :(得分:2)

您的包packageName/xPackage需要vespakoen/menu分支名称(dev-master)。当composer导入该包时,它会将其视为具有@dev标志。因此packageName/xPackagedev的稳定性级别存在依赖关系。当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.*的版本要求可能是正确的,如果您有证据表明该项目过去打破了“兼容”版本并且未对此进行更正。这不太可能是这种情况,而且它是更令人讨厌的变体,因为你强迫你自己的用户使用你的依赖的特定版本,而不能自由升级它。