2014-11-22 55 views
0

我开发与Laravel 4的应用程序,我要开发一个包,我的包(我们称之为对XPackage)需要这个包vespakoen /菜单,你可以看到从github上 https://github.com/vespakoen/menu 我必须将它添加到对XPackage composer.json在作曲家失败,包需要另一个包的需要,开发

 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 protected]" 
    } 
], 
"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

发布您的'composer.json'。 – 2014-11-22 19:07:30

+0

@justinhoward我刚刚编辑了这个问题,请你再次检查一下 – Siavosh 2014-11-23 10:30:25

回答

1

你的包packageName/xPackage需要vespakoen/menu通过分支名(dev-master)。当作曲者导入该包时,它会将其视为具有@dev标志。因此packageName/xPackagedev的稳定性级别有关。当作曲者试图导入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

不需要固定版本。需要一个版本的范围。首选:'〜2.0',或者'2.0。*'。 – Sven 2014-11-23 18:11:50

+0

@Sven好赶上,更新了我的答案。 – 2014-11-23 18:13:29

+0

@justinhoward感谢您提供丰富的答案 – Siavosh 2014-11-23 21:58:18

1

真的再也不能要求分支!始终需要版本,最好是您的依赖关系的版本范围。

不幸的是,很多安装说明采取了简单的路线,并建议要求“dev-master”作为它们的版本。这是错误的。

如果项目根据语义版本化宣布发布新版本,则需要使用波形符号运算符(例如~2.1)满足所需功能的最低版本。这会告诉你至少需要2.1.0版本,但只要不引入不兼容的更改(这将是一个新的主要编号3.0.0),任何更好的方法都可以。

如果项目没有公布任何这样的内容,如果您有证据证明项目在过去打破了“兼容”版本并且未更正此版本,则版本要求2.1.*可能是正确的。这种情况不太可能是这种情况,并且这是更为恶劣的变体,因为您迫使自己的用户使用特定版本的依赖项,而无法自由升级。