2017-02-21 6 views
2

Ich entwickle eine Paketbibliothek, die regelmäßige Abhängigkeiten und eine Dev-Abhängigkeit hat. Composer recommends to not include the composer.lock file for libraries, so ist hier die composer.jsonWarum Composer installieren --no-dev funktioniert nicht?

{ 
    "name": "myself/mypackage", 
    "require": { 
     "php": ">=5.6", 
     "nesbot/carbon": "~1.20" 
    }, 
    "require-dev": { 
     "phpunit/phpunit": "^6.0" 
    } 
} 

ich dies für andere Anwendungen eingesetzt werden kompatibel sein wollen mit PHP 5.6, und ich will, es entwickeln die neuesten PHPUnit-Test-Tools verwenden, die PHP benötigen 7.

On die travis kontinuierlichen Integration Testserver, habe ich eine Build-Matrix, die die PHPUnit Tests an PHP> 7 und ein Fusseln Skript ausführt:

composer install 
./lint-php.bash 
phpunit 

und auf PHP < 7, einfach den Quellcode Fussel:

composer install --no-dev 
./lint-php.bash 

schlägt jedoch fehl, weil es die --no-dev Flagge ignoriert und versucht trotzdem die Entwickler Abhängigkeit zu installieren.

Your requirements could not be resolved to an installable set of packages. 

    Problem 1 
    - phpunit/phpunit 6.0.7 requires php ^7.0 -> your PHP version (5.6.5) does not satisfy that requirement. 
    - phpunit/phpunit 6.0.6 requires php ^7.0 -> your PHP version (5.6.5) does not satisfy that requirement. 
    - phpunit/phpunit 6.0.5 requires php ^7.0 -> your PHP version (5.6.5) does not satisfy that requirement. 
    - phpunit/phpunit 6.0.4 requires php ^7.0 -> your PHP version (5.6.5) does not satisfy that requirement. 
    - phpunit/phpunit 6.0.3 requires php ^7.0 -> your PHP version (5.6.5) does not satisfy that requirement. 
    - phpunit/phpunit 6.0.2 requires php ^7.0 -> your PHP version (5.6.5) does not satisfy that requirement. 
    - phpunit/phpunit 6.0.1 requires php ^7.0 -> your PHP version (5.6.5) does not satisfy that requirement. 
    - phpunit/phpunit 6.0.0 requires php ^7.0 -> your PHP version (5.6.5) does not satisfy that requirement. 
    - Installation request for phpunit/phpunit ^6.0 -> satisfiable by phpunit/phpunit[6.0.0, 6.0.1, 6.0.2, 6.0.3, 6.0.4, 6.0.5, 6.0.6, 6.0.7]. 

Warum ignoriert er die --no-dev Flagge? Ich will nur, dass es meine regulären Abhängigkeiten installiert und den Abschnitt require-dev ignoriert.

Antwort

5

Trotz der recommendation ist dies, weil Sie keine composer.lock Datei haben, und ist eigentlich a requested feature.

Zuerst versucht es alle Abhängigkeiten aufzulösen. Wenn dies fehlschlägt, wird abgebrochen. Als nächstes wird die eigentliche Installation ausgeführt und ignoriert zu diesem Zeitpunkt die Dev-Abhängigkeiten. Ihr Problem ist, dass es den ersten Schritt zur Lösung nicht bestehen konnte. Es ist also nicht so, dass es die --no-dev Flagge ignoriert hat, es ist einfach nie so weit gekommen.

Option 1

Wenn Sie eine composer.lock Datei enthalten, dann überspringt er die Auflösung von Abhängigkeiten und geht direkt zu Installation, zu welchem ​​Zeitpunkt sie die Entwickler Abhängigkeiten überspringen wird.

Option 2

Da Sie nicht über eine Bibliothek, sondern ein ausführbares Werkzeug, dann anstelle der Kampf gegen die möglichen Abhängigkeitskonflikte zwischen anderen Entwickler-Tool, einschließlich Sie können später schließen, ziehen Sie es einfach aus Komponisten ganz und Verwenden Sie phive (The PHAR Installation and Verification Environment).

Verwandte Themen