1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
|
---
category: tool
tool: composer
contributors:
- ["Brett Taylor", "https://github.com/glutnix"]
translators:
- ["David Lima", "https://github.com/davelima"]
lang: pt-br
filename: LearnComposer-pt.sh
---
[Composer](https://getcomposer.org/) é uma ferramenta de gerenciamento de dependências para PHP. Ele permite que você defina as bibliotecas que seu projeto precisa, e então ele as gerencia (instala/atualiza) para você.
# Instalando
```sh
# Instala o binário composer.phar no diretório atual
curl -sS https://getcomposer.org/installer | php
# Se você fizer desta forma, você precisará chamar o composer assim:
php composer.phar about
# Instala o binário em ~/bin/composer
# Nota: certifique-se de que ~/bin está na variável de ambiente PATH do seu shell
curl -sS https://getcomposer.org/installer | php -- --install-dir=~/bin --filename=composer
```
Usuários Windows devem seguir as [Instruções de instalação para Windows](https://getcomposer.org/doc/00-intro.md#installation-windows) (EN)
## Confirmando a instalação
```sh
# Verifica a versão e lista as opções
composer
# Para obter ajuda com os comandos
composer help require
# Verifica se o Composer tem as permissões necessárias e se está atualizado
composer diagnose
composer diag # atalho
# Atualiza o binário do Composer para a última versão
composer self-update
composer self # atalho
```
# Modo de uso
O Composer armazena as dependências do seu projeto em `composer.json`.
Você pode editar este arquivo, mas é recomendável deixar que o Composer faça isso.
```sh
# Cria um novo projeto na pasta atual
composer init
# Executa um questionário interativo, te pedindo detalhes sobre o projeto.
# Você pode deixar o questionário em branco, desde que não haja outros projetos dependendo deste.
# Se um arquivo composer.json já existir, baixa as dependências
composer install
# Para baixar apenas as dependências de produção, excluindo as de desenvolvimento
composer install --no-dev
# Adiciona uma dependência de produção ao projeto
composer require guzzlehttp/guzzle
# O Composer se encarrega de verificar qual é a última versão de
# guzzlehttp/guzzle, baixar e adicionar a nova dependência no
# campo 'require' do composer.json
composer require guzzlehttp/guzzle:6.0.*
# O composer baixa a última versão que combine com o padrão informado (6.0.2, por exemplo)
# e adiciona essa dependência ao campo 'require' do arquivo composer.json
composer require --dev phpunit/phpunit:~4.5.0
# O composer irá baixar a dependencia como desenvolvimento,
# usando a versão mais recente >= 4.5.0 e < 4.6.0
composer require-dev phpunit/phpunit:^4.5.0
# O composer irá baixar a dependencia como desenvolvimento,
# usando a versão mais recente >= 4.5.0 e < 5.0
# Para mais informações sobre os padrões de versões, veja a
# Documentação sobre Versões do Composer: https://getcomposer.org/doc/articles/versions.md (EN)
# Para ver quais pacotes estão disopníveis e quais estão instalados
composer show
# Para ver quais pacotes estão instalados
composer show --installed
# Para encontrar um pacote que tenha 'mailgun' no nome ou descrição
composer search mailgun
```
[Packagist.org](https://packagist.org/) é o repositório principal para pacotes Composer. Pesquise aqui por pacotes existentes.
## `composer.json` vs `composer.lock`
O arquivo `composer.json` armazena as preferências de de versão de cada dependência, além de outras informações
O arquivo `composer.lock` armazena exatamente qual versão foi baixada para cada dependência. Nunca altere este arquivo.
Se você incluir o arquivo `composer.lock` no seu repositório git, todos os desenvolvedores irão instalar a mesma versão das dependências que você.
Mesmo se uma nova versão for lançada, o Composer baixará apenas a versão salva no arquivo de lock.
```sh
# Atualizar todas as dependências para a versão mais recente (ainda dentro das preferências definidas)
composer update
# Para atualizar a versão de uma dependência específica:
composer update phpunit/phpunit
# Para migrar um pacote para uma nova preferência de versão, você pode precisar
# remover o pacote antigo e suas dependências primeiro
composer remove --dev phpunit/phpunit
composer require --dev phpunit/phpunit:^5.0
```
## Autoloader
O Composer cria uma classe autoloader que você pode usar na sua aplicação.
Você pode instanciar as classes pelos seus namespaces.
```php
require __DIR__ . '/vendor/autoload.php';
$mailgun = new Mailgun\Mailgun("key");
```
### Autoloader da PSR-4
Você pode adicionar seus próprios namespaces ao autoloader.
No `composer.json`, adicione um campo 'autoload':
```json
{
"autoload": {
"psr-4": {"Acme\\": "src/"}
}
}
```
Isso irá dizer ao autoloader para buscar na pasta `src` tudo o que estiver no namespace `\Acme\`.
Você também pode [usar a PSR-0, um mapa de classes ou apenas listar os arquivos para incluir](https://getcomposer.org/doc/04-schema.md#autoload),
e pode usar o campo `autoload-dev` para namespaces de desenvolvimento.
Ao adicionar ou alterar alguma chave de autoload, você precisará recriar o autoloader
```sh
composer dump-autoload
composer dump # shorthand
# Otimiza pacotes PSR-0 e PSR-4 para carregar com mapas de classes também.
# É mais demorado, mas melhora a performance em produção.
composer dump-autoload --optimize --no-dev
```
# O cache do Composer
```sh
# O Composer irá evitar baixar pacotes caso eles estejam no cache. Para limpar o cache:
composer clear-cache
```
# Resolução de problemas
```sh
composer diagnose
composer self-update
composer clear-cache
```
## Tópicos (ainda) não falados neste tutorial
* Criando e distribuindo seus próprios pacotes no Packagist.org ou qualquer lugar
* Hooks Pré- e Pós-: rodar tarefas específicas em determinados eventos do Composer
### Referências
* [Composer - O gerenciador de dependências do PHP](https://getcomposer.org/) (EN)
* [Packagist.org](https://packagist.org/) (EN)
|