2014-01-16 3 views
11

Ich versuche, etwas mit Laravel zu entwickeln, und aus irgendeinem Grund kann ich es nicht installieren, um eines der Pakete zu installieren, die in der require-dev Sektion aufgelistet sind Abhängigkeiten 'composer.json Dateien. AFAIK, Dev-Abhängigkeiten sollen standardmäßig installiert sein. Ich habe es mit und ohne die --dev Flagge auf versucht. Ich habe auch versucht, den Inhalt von vendors/ zu löschen und composer.lock und ~/.composer löschen und alle Abhängigkeiten von Grund auf neu installieren, aber immer noch kein Glück. Ich habe auch verschiedene Wiederholungen des Befehls composer update ausprobiert.Composer wird keine "require-dev" -Pakete installieren

Zum Beispiel in vendor/laravel/framework/composer.json, listet es diese:

"require-dev": { 
    "aws/aws-sdk-php": "2.4.*", 
    "iron-io/iron_mq": "1.4.*", 
    "pda/pheanstalk": "2.1.*", 
    "mockery/mockery": "0.8.0", 
    "phpunit/phpunit": "3.7.*" 
}, 

Keine von diesen installiert bekommen. Irgendwelche Ideen was vermisse ich? Hier ist meine Hauptdatei composer.json, FWIW.

{ 
"name": "laravel/laravel", 
"description": "The Laravel Framework.", 
"keywords": ["framework", "laravel"], 
"license": "MIT", 
"require": { 
    "laravel/framework": "4.0.*", 
    "rncryptor/rncryptor-php": "1.*" 
}, 
"autoload": { 
    "classmap": [ 
     "app/commands", 
     "app/controllers", 
     "app/models", 
     "app/libraries", 
     "app/database/migrations", 
     "app/database/seeds", 
     "app/tests/TestCase.php" 
    ] 
}, 
"scripts": { 
    "post-install-cmd": [ 
     "php artisan optimize" 
    ], 
    "pre-update-cmd": [ 
     "php artisan clear-compiled" 
    ], 
    "post-update-cmd": [ 
     "php artisan optimize" 
    ], 
    "post-create-project-cmd": [ 
     "php artisan key:generate" 
    ] 
}, 
"config": { 
    "preferred-install": "dist" 
}, 
"minimum-stability": "dev" 
} 

Ich lief composer self-update, so sollte es die neueste Version sein. composer --version Lauf zeigt dies:

Composer version b20021cc6aa113069e4223b78d0074a1fc7dd4e8 2014-01-14 16:22:09 
+0

Haben Sie versucht, das '--require-dev' Flag zu erzwingen, um die Installation zu erzwingen? – Cristian

+0

Ich habe 'composer install --require-dev' und' composer update --require-dev' versucht, aber beide geben mir eine Fehlermeldung, dass dieses Flag nicht existiert. Ich habe es mit '--dev' versucht, aber kein Glück. – curtisdf

Antwort

19

Komponist immer nur die Pakete installiert aufgeführten „erfordern-dev“ Ihren Master composer.json-Datei, und wenn diese Pakete noch etwas brauchen, dann nur ihre „require“ Pakete sind installiert, aber nicht ihre "require-dev" -Pakete.

Das ist eigentlich eine gute Sache. Wenn Sie ein Paket entwickeln möchten, klonen Sie deren Repository, installieren alles, was für die Entwicklung benötigt wird, und sind bereit, einen Beitrag zu leisten. Aber wenn Sie dieses Paket für Ihre eigene Software benötigen, ist dies kein Anwendungsfall, um dieses spezielle Paket zu entwickeln - es ist der Anwendungsfall, um Ihre eigene Software zu entwickeln.

Also die tl; dr: Composer installiert nur die Entwicklungsanforderungen der composer.json, keine Abhängigkeiten.

+1

Ich verstehe. Ich glaube, ich habe einfach nicht verstanden, was in der Dokumentation stand, als es "root" bedeutete. – curtisdf

2

Es gibt eine Lösung für die Installation der require-dev-Pakete eines Herstellers in Ihrem Projekt.

https://github.com/wikimedia/composer-merge-plugin

Fügen Sie diese in Ihrem composer.json Ihres Projekts

{ 
    "require": { 
     "wikimedia/composer-merge-plugin": "dev-master" 
    }, 
    "extra": { 
     "merge-plugin": { 
      "include": [ 
       "vendor/laravel/framework/composer.json" 
      ] 
      "recurse": true, 
      "replace": false, 
      "ignore-duplicates": false, 
      "merge-dev": true, 
      "merge-extra": false, 
      "merge-extra-deep": false, 
      "merge-scripts": false 
     } 
    } 
} 

Es ist wichtig zu haben "merge-dev": true, laufen

composer update 

Und die erfordern-dev-Pakete von „vendor /laravel/framework/composer.json "wird in Ihrem Projekt installiert.