155 votes

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

Je commence à utiliser composer, je sais si peu de choses à ce sujet et j'ai une petite expérience dans le développement d'applications web.

Je viens de parcourir le tutoriel de Nettuts+, donc j'ai des questions basiques sur composer.

{
  "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 composer install --dev ?
  2. J'ai lu une partie de la documentation de composer mais je ne comprends toujours pas pourquoi nous avons la partie "require-dev" ? Est-ce parce que nous voulons obtenir une version spécifique du package plutôt que de toujours obtenir la dernière version stable ?

209voto

localheinz Points 803

Différents environnements

Typiquement, le logiciel fonctionnera dans différents environnements :

  • développement
  • test
  • staging
  • production

Différentes dépendances dans différents environnements

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

  • staging
  • production

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

  • développement
  • test

les environnements.

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

  • 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 conduire le développement en utilisant des tests)
  • etc.

Déploiement

Maintenant, dans les environnements développement et test, vous exécuteriez généralement

$ composer install

pour installer à la fois les dépendances de production et de développement.

Cependant, dans les environnements staging et production, vous voulez uniquement installer les dépendances nécessaires pour exécuter l'application, et dans le cadre du processus de déploiement, vous exécuteriez généralement

$ composer install --no-dev

pour n'installer que les dépendances de production.

Sémantique

En d'autres termes, les sections

  • require
  • require-dev

indiquent à composer quels packages doivent être installés lorsque vous exécutez

$ composer install

ou

$ composer install --no-dev

C'est tout.

Remarque Les dépendances de développement des packages sur lesquels votre application ou package dépendra ne seront jamais installées

Pour référence, voir :

63voto

Florent Points 6599
  1. Conformément au manuel de composer :

    require-dev (root-only)

    Liste les packages requis pour le développement de ce package, ou pour l'exécution de tests, etc. Les exigences de développement du package racine sont installées par défaut. L'option --no-dev est supportée par les commandes install ou update et permet d'empêcher 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 en est en fait assez simple. En contribuant à une bibliothèque spécifique, vous pouvez souhaiter exécuter des suites de tests ou d'autres outils de développement (par exemple symfony). Mais si vous installez cette bibliothèque dans un projet, ces dépendances de développement peuvent ne pas être nécessaires : tous les projets n'exigent pas un exécuteur de tests.

22voto

WereWolf - The Alpha Points 49671

Depuis le site du compositeur (c'est assez clair)

require#

Liste les packages requis par ce package. Le package ne sera pas installé à moins que ces exigences ne soient satisfaites.

require-dev (root-only)#

Liste les packages requis pour le développement de ce package, ou pour l'exécution de tests, etc. Les exigences de développement du package principal sont installées par défaut. Les options --no-dev pour l'installation ou la mise à jour permettent d'empêcher 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 qui ne sont pas nécessaires en production. Lorsque vous téléchargez le projet sur votre serveur de production (en utilisant git), la partie require-dev sera ignorée.

Consultez également cette réponse postée par l'auteur ainsi que cette publication.

4voto

MKJ Points 605

Section require Cette section contient les packages/dépendances qui sont de meilleurs candidats à être installés/requis dans l'environnement de production.

Section require-dev: Cette section contient les packages/dépendances qui peuvent être utilisés par le développeur pour tester son code (ou pour expérimenter sur sa machine locale et elle ne veut pas que ces packages soient installés dans l'environnement de production).

2voto

fico7489 Points 2389

La règle générale est que vous voulez des packages de la section require-dev uniquement en environnement de développement (dev), par exemple en environnement local.

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

En environnement de staging et de production, vous voulez probablement uniquement des packages de la section require.

Cependant, vous pouvez toujours exécuter composer install --no-dev et composer update --no-dev sur n'importe quel environnement, la commande installera uniquement les packages de la section require, pas de la section require-dev, mais vous voudrez probablement exécuter cela uniquement en environnement de staging et de production, pas en local.

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

  1. vitesse
  2. risque de divulguer des informations de débogage
  3. etc

Certains bons candidats pour la section 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 packages ci-dessus et vous comprendrez pourquoi vous n'avez pas besoin d'eux en production.

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X