it-swarm.com.de

Was ist der Unterschied zwischen require und require-dev?

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.

225
slier

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.

214
Scott Tesler

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

52
user557846

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 Haupt composer.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.

39
Nathan Craike