Estou começando a usar o composer, conheço tão pouco sobre ele e tenho alguma experiência com desenvolvimento de aplicativos web.
Acabei de passar pelo Nettuts + Tutorial , então tenho uma pergunta básica sobre o 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"
}
- O que quer que apareça em
"require-dev"
parte, só será baixado e instalado comcomposer install --dev
? - Eu li alguma documentação do compositor, mas ainda não entendo qual é a razão de termos
"require-dev"
parte? É porque queremos obter uma versão específica do pacote, em vez de sempre obter a versão estável mais recente?
composer-php
Artesão
fonte
fonte
Respostas:
Ambientes Diferentes
Normalmente, o software será executado em ambientes diferentes:
development
testing
staging
production
Dependências diferentes em ambientes diferentes
As dependências que são declaradas na
require
seção decomposer.json
são normalmente dependências que são necessárias para executar um aplicativo ou pacote emstaging
production
ambientes, enquanto as dependências declaradas na
require-dev
seção são normalmente dependências que são necessárias emdeveloping
testing
ambientes.
Por exemplo, além dos pacotes usados para realmente executar um aplicativo, podem ser necessários pacotes para desenvolver o software, como:
friendsofphp/php-cs-fixer
(para detectar e corrigir problemas de estilo de codificação)squizlabs/php_codesniffer
(para detectar e corrigir problemas de estilo de codificação)phpunit/phpunit
(para conduzir o desenvolvimento usando testes)Desdobramento, desenvolvimento
Agora, em ambientes
development
etesting
, você normalmente executariapara instalar as dependências
production
edevelopment
.No entanto, em ambientes
staging
eproduction
, você só deseja instalar dependências que são necessárias para executar o aplicativo e, como parte do processo de implantação, você normalmente executariapara instalar apenas
production
dependências.Semântica
Em outras palavras, as seções
require
require-dev
indique
composer
quais pacotes devem ser instalados quando você executaou
Isso é tudo.
Nota As dependências de desenvolvimento de pacotes dos quais a sua aplicação ou pacote depende nunca serão instaladas
Para referência, consulte:
fonte
vendor
pasta via FTP?—no-dev
. Além disso, o FTP provavelmente será muito lento.composer.json
- consulte por exemplo github.com/FriendsOfPHP/PHP-CS-Fixer/tree/2.16/dev-tools .De acordo com o manual do compositor :
Portanto, a execução
composer install
também baixará as dependências de desenvolvimento.A razão é bastante simples. Ao contribuir para uma biblioteca específica, você pode querer executar suítes de teste ou outras ferramentas de desenvolvimento (por exemplo, symfony). Mas se você instalar esta biblioteca em um projeto, essas dependências de desenvolvimento podem não ser necessárias: nem todo projeto requer um executor de teste.
fonte
Do site do compositor (é claro o suficiente)
Usando require-dev no Composer, você pode declarar as dependências necessárias para o desenvolvimento / teste do projeto, mas não na produção. Quando você faz o upload do projeto para seu servidor de produção (usando git), a
require-dev
parte é ignorada.Verifique também esta resposta postada pelo autor e esta postagem também.
fonte
seção require Esta seção contém os pacotes / dependências que são melhores candidatos para serem instalados / requeridos no ambiente de produção.
Seção require-dev: Esta seção contém os pacotes / dependências que podem ser usados pelo desenvolvedor para testar seu código (ou para experimentar em sua máquina local e ela não quer que esses pacotes sejam instalados no ambiente de produção).
fonte
A regra geral é que você deseja pacotes da seção require-dev apenas em ambientes de desenvolvimento (dev), por exemplo, ambiente local.
Os pacotes na seção require-dev são pacotes que ajudam você a depurar o aplicativo, executar testes etc.
No ambiente de teste e produção , você provavelmente deseja apenas pacotes da seção necessária .
Mas de qualquer maneira você pode executar composer install --no-dev e composer update --no-dev em qualquer ambiente, o comando irá instalar apenas pacotes da seção necessária , não de require-dev , mas provavelmente você deseja executar isto apenas na preparação e produção ambientes não locais.
Teoricamente, você pode colocar todos os pacotes na seção de requerimento e nada acontecerá, mas você não deseja desenvolver pacotes no ambiente de produção pelos seguintes motivos:
Alguns bons candidatos para require-dev são:
você pode ver o que os pacotes acima estão fazendo e por que não precisa deles na produção.
Veja mais aqui: https://getcomposer.org/doc/04-schema.md
fonte