via update mac instalar composer composer-php

composer php - update - ¿Cuál es la diferencia entre las secciones require y require-dev en composer.json?



instalar composer ubuntu (5)

Diferentes ambientes

Normalmente, el software se ejecutará en diferentes entornos:

  • development
  • testing
  • staging
  • production

Diferentes dependencias en diferentes ambientes

Las dependencias que se declaran en la sección de require de composer.json son típicamente dependencias que se requieren para ejecutar una aplicación o un paquete en

  • staging
  • production

entornos, mientras que las dependencias declaradas en la sección require-dev son típicamente dependencias que se requieren en

  • developing
  • testing

ambientes

Por ejemplo, además de los paquetes utilizados para ejecutar una aplicación, los paquetes pueden ser necesarios para desarrollar el software, como:

  • friendsofphp/php-cs-fixer (para detectar y solucionar problemas de estilo de codificación)
  • squizlabs/php_codesniffer (para detectar y solucionar problemas de estilo de codificación)
  • phpunit/phpunit (para impulsar el desarrollo mediante pruebas)
  • etc.

Despliegue

Ahora, en entornos de development y testing , normalmente ejecutaría

$ composer install

Instalar tanto dependencias de production como de development .

Sin embargo, en entornos de production y de transición, solo desea instalar las dependencias que son necesarias para ejecutar la aplicación y, como parte del proceso de implementación, normalmente ejecutaría

$ composer install --no-dev

Instalar solo dependencias de production .

Semántica

En otras palabras, las secciones.

  • require
  • require-dev

Indicar al composer qué paquetes deben instalarse al ejecutar

$ composer install

o

$ composer install --no-dev

Eso es todo.

Nota Las dependencias de desarrollo de los paquetes de las que depende su aplicación o paquete nunca se instalarán

Para referencia, ver:

Estoy empezando a usar compositor, sé muy poco al respecto y tengo poca experiencia con el desarrollo de aplicaciones web.

Simplemente paso por Nettuts + Tutorial , así que tengo una pregunta básica sobre el compositor.

{ "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. Lo que aparezca en la parte "require-dev", solo se descargará e instalará con la instalación de compositor --dev ?
  2. Leí parte de la documentación del compositor, pero aún no entiendo, ¿por qué tenemos la parte de "require-dev"? ¿Es porque queremos obtener una versión específica del paquete y no siempre obtener la última versión estable?

  1. Según el manual del compositor :

    require-dev (solo raíz)

    Enumera los paquetes necesarios para desarrollar este paquete o ejecutar pruebas, etc. Los requisitos de desarrollo del paquete raíz se instalan de forma predeterminada. Tanto la install como la update admiten la --no-dev que impide que se instalen las dependencias de desarrollo.

    Por lo tanto, ejecutar la composer install también descargará las dependencias de desarrollo.

  2. La razón es en realidad bastante simple. Cuando contribuyas a una biblioteca específica, es posible que desees ejecutar suites de prueba u otras herramientas de desarrollo (por ejemplo, Symfony). Pero si instala esta biblioteca en un proyecto, es posible que no se requieran esas dependencias de desarrollo: no todos los proyectos requieren un corredor de prueba.


Desde el sitio del compositor (es suficientemente claro)

exigir#

Enumera los paquetes requeridos por este paquete. El paquete no se instalará a menos que esos requisitos puedan cumplirse.

require-dev (root-only) #

Enumera los paquetes necesarios para desarrollar este paquete o ejecutar pruebas, etc. Los requisitos de desarrollo del paquete raíz se instalan de forma predeterminada. Tanto la instalación como la actualización admiten la opción --no-dev que impide que se instalen las dependencias de desarrollo.

Al utilizar require-dev en Composer, puede declarar las dependencias que necesita para desarrollar / probar el proyecto pero que no necesita en producción. Cuando cargue el proyecto a su servidor de producción (usando git), la parte require-dev se ignorará.

También puedes ver esta respuesta publicada por el author y esta publicación también.


La regla general es que desea paquetes de la sección require-dev solo en entornos de desarrollo (dev), por ejemplo, el entorno local.

Los paquetes en la sección require-dev son paquetes que le ayudan a depurar la aplicación, ejecutar pruebas, etc.

En el entorno de preparación y producción , es probable que solo desee paquetes de la sección de requisitos .

Pero, de todos modos, puede ejecutar composer install --no-dev y composer update --no-dev en cualquier entorno, el comando instalará solo los paquetes de la sección requerida , no de require-dev , pero probablemente desee ejecutar esto solo durante la preparación y la producción Ambientes no en local.

Teóricamente, puede poner todos los paquetes en la sección de requisitos y no ocurrirá nada, pero no desea desarrollar paquetes en el entorno de producción debido a las siguientes razones:

  1. velocidad
  2. potencial de exponer algunos datos de depuración
  3. etc

Algunos buenos candidatos para require-dev son:

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

puede ver lo que hacen los paquetes anteriores y verá por qué no los necesita en producción.

Vea más aquí: https://getcomposer.org/doc/04-schema.md


sección de requisitos Esta sección contiene los paquetes / dependencias que son mejores candidatos para ser instalados / requeridos en el entorno de producción.

require-dev section: esta sección contiene los paquetes / dependencias que el desarrollador puede usar para probar su código (or for the experiment purpose on her local machine and she wants these packages should not be installed on the production environment.)