web-dev-qa-db-fra.com

Quelle est la différence entre require et require-dev?

Je suis nouveau dans la composer et j'aimerais connaître la différence entre require et require-dev. Le site Web composer n'offre pas une bonne explication de la différence entre ces deux.

La partie que je ne reçois pas est Lists packages required for developing this package, or running tests, etc. de Document officiel du compositeur

225
slier

Les packages require-dev sont des packages qui ne sont pas nécessaires au bon fonctionnement de votre projet et ne devraient pas être inclus dans la version production de votre projet.

Il s’agit généralement de packages tels que phpunit/phpunit que vous n’utiliseriez que pendant le développement.

214
Scott Tesler

cela me semble clair:

exiger

Répertorie les paquets requis par ce paquet. Le package ne sera pas installé à moins que ces exigences ne puissent être satisfaites.

require-dev (racine uniquement)

Liste les paquets requis pour développer ce paquet  (1), ou l'exécution de tests, etc. Les exigences de développement du paquet racine ne seront installées que si l'installation est exécutée avec --dev ou si la mise à jour est exécutée sans --no-dev.

http://getcomposer.org/doc/04-schema.md


1. les packages utilisés pour développer un package

52
user557846

La différence essentielle est que Composer installera uniquement les dépendances require-dev pour le "package racine" - le répertoire dans lequel vous exécutez composer install. La documentation décrit ceci comme:

Le paquet racine est le paquet défini par le composer.json à la racine de votre projet. C'est le composer.json principal qui définit les exigences de votre projet.

… Et la require-dev documentation spécifie qu'il s'agit d'une "racine uniquement".

En pratique, cela signifie que les dépendances d'un paquet require-dev ne sont pas utilisées si le paquet est installé en tant que dépendance pour quelque chose d'autre (c'est-à-dire qu'il est installé dans le dossier vendor d'un autre projet).

Donc, si vous avez phpunit dans la liste require-dev pour YourProject , et que je clone vers le bas YourProject et exécutez composer install dans yourproject/ directory, Composer installera phpunit sur yourproject/vendor/, car il est probable que je fasse du développement sur Votre projet . En tant que partie intégrante du développement, je souhaiterai probablement exécuter la suite de tests de YourProject . Pour ce faire, j’aurai besoin de phpunit.

Mais, si j'ajoute votre projet en tant que dépendance de mon projet , l'installation du paquet myproject installera le fichier yourproject Package également , mais il n’installe pas phpunit.

Vous pouvez redéfinir ce comportement avec les --dev et --no-devoptions , mais le comportement par défaut dépend du fait que le package concerné soit le paquetage racine .

39
Nathan Craike