Quelle est la différence entre les sections require et require-dev dans composer.json?

Je commence à utiliser le compositeur, je le connais si peu et j’ai un peu d’expérience en développement d’applications Web.

Je passe simplement en revue le didacticiel Nettuts + . J’ai donc une question de base sur le compositeur.

{ "require": { "laravel/framework": "4.0.*", "way/generators": "dev-master", "twitter/bootstrap": "dev-master", "conarwelsh/mustache-l4": "dev-master" }, "require-dev": { "phpunit/phpunit": "3.7.*", "mockery/mockery": "0.7.*" }, "autoload": { "classmap": [ "app/commands", "app/controllers", "app/models", "app/database/migrations", "app/database/seeds", "app/tests/TestCase.php" ] }, "scripts": { "post-update-cmd": "php artisan optimize" }, "minimum-stability": "dev" } 
  1. Tout ce qui apparaît dans la partie “require-dev”, ne sera téléchargé et installé qu’avec le composeur install –dev ?
  2. J’ai lu une partie de la documentation du compositeur mais je ne comprends toujours pas pourquoi nous avons une partie “require-dev”? Est-ce parce que nous voulons obtenir une version spécifique du paquet plutôt que de toujours obtenir la dernière version stable?

Différents environnements

Généralement, les logiciels seront exécutés dans différents environnements:

  • development
  • testing
  • staging
  • production

Différentes dépendances dans différents environnements

Les dépendances déclarées dans la section require de composer.json sont généralement des dépendances requirejses pour exécuter une application ou un package dans

  • staging
  • production

environnements, alors que les dépendances déclarées dans la section require-dev sont généralement des dépendances requirejses dans

  • developing
  • testing

environnements.

Par exemple, en plus des packages utilisés pour exécuter une application, des packages peuvent être nécessaires pour développer le logiciel, tels que:

  • friendsofphp/php-cs-fixer (pour détecter et corriger les problèmes de style de codage)
  • squizlabs/php_codesniffer (pour détecter et corriger les problèmes de style de codage)
  • phpunit/phpunit (pour piloter le développement à l’aide de tests)
  • etc.

Déploiement

Maintenant, dans testing environnements de development et de testing , vous exécutez généralement

 $ composer install 

installer les dépendances de production et de development .

Toutefois, dans production environnements de staging et de production , vous souhaitez uniquement installer les dépendances requirejses pour exécuter l’application et, dans le cadre du processus de déploiement, vous devez généralement exécuter

 $ composer install --no-dev 

installer uniquement production dépendances de production .

Sémantique

En d’autres termes, les sections

  • require
  • require-dev

indiquer au composer quels paquets doivent être installés lors de l’exécution

 $ composer install 

ou

 $ composer install --no-dev 

C’est tout.

Remarque Les dépendances de développement des packages dont dépend votre application ou votre package ne seront jamais installées

Pour référence, voir:

  1. Selon le manuel du compositeur :

    require-dev (root uniquement)

    Répertorie les packages requirejs pour développer ce package, ou exécuter des tests, etc. Les exigences de développement du package racine sont installées par défaut. L’ install ou la update prennent en charge l’option --no-dev qui empêche l’installation des dépendances de développement.

    Ainsi, l’exécution de composer install téléchargera également les dépendances de développement.

  2. La raison est en fait assez simple. Lorsque vous consortingbuez à une bibliothèque spécifique, vous pouvez exécuter des suites de tests ou d’autres outils de développement (par exemple, symfony). Mais si vous installez cette bibliothèque sur un projet, ces dépendances de développement peuvent ne pas être requirejses: tous les projets ne nécessitent pas un exécuteur de test.

Du site du compositeur (c’est assez clair)

exiger#

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

require-dev (root uniquement) #

Répertorie les packages requirejs pour développer ce package, ou exécuter des tests, etc. Les exigences de développement du package racine sont installées par défaut. L’installation ou la mise à jour prennent en charge l’option –no-dev qui empêche l’installation des dépendances de développement.

En utilisant require-dev dans Composer, vous pouvez déclarer les dépendances dont vous avez besoin pour le développement / test du projet, mais pas en production. Lorsque vous téléchargez le projet sur votre serveur de production (en utilisant git), la partie require-dev sera ignorée.

Vérifiez également cette réponse postée par l’ auteur et ce post aussi.

section require Cette section contient les packages / dépendances qui sont les meilleurs candidats à installer / requirejs dans l’environnement de production.

Section require-dev: Cette section contient les paquets / dépendances qui peuvent être utilisés par le développeur pour tester son code (or for the experiment purpose on her local machine and she wants these packages should not be installed on the production environment.)

La règle générale est que vous ne voulez que les packages de la section require-dev dans les environnements de développement (dev), par exemple l’environnement local.

Les packages de la section require-dev sont des packages qui vous aident à déboguer une application, à exécuter des tests, etc.

Dans l’environnement de mise en scène et de production , vous ne voulez probablement que des packages de la section require .

Mais de toute façon vous pouvez exécuter le composeur install –no-dev et le composeur de mise à jour –no-dev sur n’importe quel environnement, la commande installera seulement les paquets de la section requirejse pas de require-dev , mais vous voudrez probablement l’exécuter seulement environnements non locaux.

Théoriquement, vous pouvez placer tous les packages dans la section require et rien ne se passera, mais vous ne voulez pas développer de packages dans un environnement de production pour les raisons suivantes:

  1. la vitesse
  2. potentiel d’exposer des informations de débogage
  3. etc

Quelques bons candidats pour require-dev sont:

 "filp/whoops": "^2.0", "fzaninotto/faker": "^1.4", "mockery/mockery": "^1.0", "nunomaduro/collision": "^2.0", "phpunit/phpunit": "^7.0" 

vous pouvez voir ce que font les paquets ci-dessus et vous verrez pourquoi vous n’en avez pas besoin en production.

Voir plus ici: https://getcomposer.org/doc/04-schema.md