Ich bin neu in composer
und möchte den Unterschied zwischen require
und require-dev
Kennen. Die composer Website bietet keine gute Erklärung für den Unterschied zwischen diesen beiden.
Der Teil, den ich nicht bekomme, ist Lists packages required for developing this package, or running tests, etc.
Von Composer Official Docs.
Das require-dev
Pakete sind Pakete, die nicht erforderlich sind, damit Ihr Projekt funktioniert, und sollten nicht in die Produktion Version Ihres Projekts aufgenommen werden.
In der Regel sind dies Pakete wie phpunit/phpunit
, die Sie nur während der Entwicklung verwenden würden.
scheint mir klar:
benötigen
Listet die Pakete auf, die für dieses Paket erforderlich sind. Das Paket wird nur installiert, wenn diese Anforderungen erfüllt werden können.
require-dev (nur root)
Listet Pakete auf, die für die Entwicklung dieses Pakets erforderlich sind (1), oder Ausführen von Tests usw. Die dev-Anforderungen des Root-Pakets werden nur installiert, wenn die Installation mit
--dev
ausgeführt wird oder wenn das Update ohne--no-dev
ausgeführt wird.
http://getcomposer.org/doc/04-schema.md
1. die zur Entwicklung eines Pakets verwendeten Pakete
Der Hauptunterschied besteht darin, dass Composer nur require-dev
- Abhängigkeiten für das "root package" - das Verzeichnis, in dem Sie composer install
. Die Dokumentation beschreibt dies als:
Das Root-Paket ist das Paket, das durch
composer.json
Im Stammverzeichnis Ihres Projekts definiert ist. Es ist der Hauptcomposer.json
, Der Ihre Projektanforderungen definiert.
… Und die Dokumentation require-dev
gibt an, dass es sich um "nur root" handelt.
In der Praxis bedeutet dies, dass die Abhängigkeiten eines Pakets require-dev
Nicht verwendet werden, wenn das Paket als Abhängigkeit für etwas anderes installiert wird (dh, es wird im Ordner vendor
eines anderen Projekts installiert).
Wenn Sie also phpunit
in der Liste require-dev
Für YourProject haben und ich Ihr Projekt herunterklone ) und führe composer install
im Verzeichnis yourproject/
aus, Composer installiert phpunit
auf yourproject/vendor/
, Ich mache eine Entwicklung auf YourProject . Als Teil der Entwicklung möchte ich wahrscheinlich ausführen Die Testsuite von YourProject , und dazu brauche ich phpunit
.
Wenn ich jedoch YourProject als Abhängigkeit von MyProject hinzufüge, installiert die Installation des Pakets myproject
das yourproject
-Paket auch , aber es wird phpunit
nicht installiert.
Sie können dieses Verhalten mit --dev
Und --no-dev
Überschreiben options , jedoch mit dem Standardverhalten basiert darauf, ob das betroffene Paket das Root-Paket ist.