2014-11-22 54 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.*可能是正確的。這種情況不太可能是這種情況,並且這是更爲惡劣的變體,因爲您迫使自己的用戶使用特定版本的依賴項,而無法自由升級。