web-dev-qa-db-fra.com

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

Je commence à utiliser Composer, j'en sais si peu et j'ai une petite expérience du développement d'applications Web.

Je viens de parcourir Nettuts + Tutorial , donc j'ai 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" sera uniquement téléchargé et installé avec composer 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 version plutôt que la version stable la plus récente?
68
Artisan

Différents environnements

Généralement, les logiciels fonctionneront 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 requises pour l'exécution d'une application ou d'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 requises dans

  • developing
  • testing

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, tels que:

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

Déploiement

Maintenant, dans les environnements development et testing, vous exécuterez généralement

$ composer install

installer les dépendances production et development.

Toutefois, dans les environnements staging et production, vous souhaitez uniquement installer les dépendances requises pour l'exécution de l'application. Dans le cadre du processus de déploiement, vous exécuterez généralement

$ composer install --no-dev

installer uniquement les dépendances production.

Sémantique

En d'autres termes, les sections

  • require
  • require-dev

indiquez à composer les paquetages à installer lors de l'exécution

$ composer install

ou

$ composer install --no-dev

C'est tout.

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

Pour référence, voir:

52
localheinz
  1. Selon le manuel du compositeur :

    require-dev (racine uniquement)

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

    Donc, exécuter composer install va également télécharger les dépendances de développement.

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

54
Florent

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

exiger#

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

require-dev (racine uniquement) #

Répertorie les paquetages nécessaires au développement de ce paquet ou à l'exécution de tests. etc. Les exigences de développement du paquet racine sont installées par défaut. L'installation ou la mise à jour prend en charge l'option --no-dev que empêche les dépendances dev d'être installés.

En utilisant require-dev dans Composer, vous pouvez déclarer les dépendances dont vous avez besoin pour développer/tester le projet, mais dont vous n'avez pas besoin en production. Lorsque vous téléchargez le projet sur votre serveur de production (à l'aide de git), la partie require-dev est ignorée.

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

18
The Alpha

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

Section require-dev: Cette section contient les packages/dépendances que le développeur peut utiliser 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.)

1
MKJ

La règle générale est que vous voulez les paquets de la section require-dev uniquement 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 les environnements staging et production, vous ne voulez probablement que les packages de la section require.

Mais de toute façon, vous pouvez exécuter composer installer --no-dev et composer update --no-dev sur n’importe quel environnement, la commande n’installera que les paquets de la section required et non de require- dev, mais vous souhaiterez probablement l'exécuter uniquement dans les environnements staging et production non locaux.

Théoriquement, vous pouvez mettre tous les packages dans la section require et rien ne se passera, mais vous ne souhaitez pas développer de packages dans l'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 pour la production.

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

0
fico7489