La distinction essentielle est que Composer n'installera que les éléments suivants require-dev
dépendances pour le "paquet racine" - le répertoire où vous exécutez composer install
. La documentation décrit cela comme :
Le paquet Root est le paquet défini par l'option composer.json
à la racine de votre projet. C'est le principal composer.json
qui définit vos exigences du projet.
et le require-dev
documentation précise qu'il s'agit de "Root-only".
Dans la pratique, cela signifie que l'adresse de l'utilisateur d'un package require-dev
ne sont pas utilisées si le paquet est installé en tant que dépendance de quelque chose d'autre (c'est-à-dire s'il est installé dans le dossier de projet d'un autre projet). vendor
dossier).
Donc si vous avez phpunit
dans le require-dev
liste pour Votre projet et je clone vers le bas Votre projet et exécuter composer install
dans le yourproject/
Composer installera phpunit
a yourproject/vendor/
parce qu'il est probable que je fasse quelques développement sur Votre projet . Dans le cadre de ce développement, je vais probablement vouloir exécuter Votre projet et pour ce faire, j'aurai besoin de phpunit
.
Mais, si j'ajoute Votre projet comme une dépendance de Mon projet l'installation de la myproject
installera le paquet yourproject
également, mais il ne s'installe pas phpunit
.
Vous peut remplacer ce comportement par l'option --dev
y --no-dev
options mais le comportement par défaut est basé sur le fait que le paquet concerné soit le paquet Paquet racine .