Estoy empezando a usar Composer, sé muy poco sobre él y tengo un poco de experiencia con el desarrollo de aplicaciones web.
Acabo de revisar el tutorial de Nettuts + , 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"
}
- Lo que aparezca en
"require-dev"
parte, solo se descargará e instalará concomposer install --dev
? - Leí parte de la documentación del compositor pero todavía no entiendo cuál es la razón por la que tenemos
"require-dev"
parte. ¿Es porque queremos obtener una versión específica del paquete en lugar de obtener siempre la última versión estable?
composer-php
Artesano
fuente
fuente
Respuestas:
Diferentes ambientes
Normalmente, el software se ejecutará en diferentes entornos:
development
testing
staging
production
Diferentes dependencias en diferentes entornos
Las dependencias que se declaran en la
require
sección decomposer.json
son típicamente dependencias que se requieren para ejecutar una aplicación o un paquete enstaging
production
entornos, mientras que las dependencias declaradas en la
require-dev
sección suelen ser dependencias que se requieren endeveloping
testing
Ambientes.
Por ejemplo, además de los paquetes que se utilizan para ejecutar realmente una aplicación, es posible que se necesiten paquetes 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
(impulsar el desarrollo mediante pruebas)Despliegue
Ahora, en entornos
development
ytesting
, normalmente ejecutaríapara instalar tanto
production
ydevelopment
dependencias.Sin embargo, en entornos
staging
yproduction
, solo desea instalar las dependencias que son necesarias para ejecutar la aplicación y, como parte del proceso de implementación, normalmente ejecutarápara instalar solo
production
dependencias.Semántica
En otras palabras, las secciones
require
require-dev
indicar a
composer
qué paquetes deben instalarse cuando ejecutao
Eso es todo.
Nota Las dependencias de desarrollo de los paquetes de los que depende su aplicación o paquete nunca se instalarán
Para referencia, consulte:
fuente
vendor
carpeta a través de FTP?—no-dev
. Además, FTP probablemente será bastante lento.composer.json
- vea, por ejemplo, github.com/FriendsOfPHP/PHP-CS-Fixer/tree/2.16/dev-tools .Según el manual del compositor :
Por lo tanto, ejecutar
composer install
también descargará las dependencias de desarrollo.La razón es bastante simple. Al contribuir a una biblioteca específica, es posible que desee ejecutar conjuntos de pruebas u otras herramientas de desarrollo (por ejemplo, Symfony). Pero si instala esta biblioteca en un proyecto, es posible que esas dependencias de desarrollo no sean necesarias: no todos los proyectos requieren un ejecutor de pruebas.
fuente
Desde el sitio del compositor (es lo suficientemente claro)
Al usar 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 en su servidor de producción (usando git)
require-dev
, se ignorará una parte.También verifique esta respuesta publicada por el autor y esta publicación también.
fuente
sección require Esta sección contiene los paquetes / dependencias que son mejores candidatos para ser instalados / requeridos en el entorno de producción.
Sección require-dev: esta sección contiene los paquetes / dependencias que el desarrollador puede usar para probar su código (o para experimentar en su máquina local y no quiere que estos paquetes se instalen en el entorno de producción).
fuente
La regla general es que desea paquetes de la sección require-dev solo en entornos de desarrollo (dev), por ejemplo, un entorno local.
Los paquetes en la sección require-dev son paquetes que lo ayudan a depurar la aplicación, ejecutar pruebas, etc.
En el entorno de ensayo y producción , probablemente solo desee paquetes de la sección require .
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 en la etapa de prueba y producción entornos no locales.
Teóricamente, puede colocar todos los paquetes en la sección require y no pasará nada, pero no desea desarrollar paquetes en el entorno de producción por las siguientes razones:
Algunos buenos candidatos para require-dev son:
puede ver lo que están haciendo los paquetes anteriores y verá por qué no los necesita en producción.
Vea más aquí: https://getcomposer.org/doc/04-schema.md
fuente