Bom dia
Quando lidei pela primeira vez com o compositor, desenhei uma pequena folha de dicas para mim e agora, depois de um tempo, a apresento ao público em uma forma ligeiramente modificada.
Esta publicação é relevante para aqueles que, pela primeira vez, encontraram um gerenciador de pacotes indispensável para PHP.
Portanto, o Composer é um gerenciador de pacotes para PHP.
Para que serve o Composer e o exemplo mais simples de seu uso?
Tome
este projeto como um exemplo.
Em poucas palavras: este é um conjunto de scripts para trabalhar na API VK
Assim, para a operação desses scripts, você precisa de várias bibliotecas
As bibliotecas estão listadas no arquivo composer.json - um arquivo-chave ao trabalhar com o compositor
Exemplo compositer.json:

Este projeto usa 5 bibliotecas. Portanto, se o desenvolvedor decidir publicar este projeto no github, ele só precisará soltar a pasta de script no nabo e compor composer.json, que descreverá as bibliotecas necessárias para o projeto. A simplicidade é óbvia: nos nabos, você não precisa arrastar todas as bibliotecas necessárias com o trailer após os arquivos. Ocupa menos espaço, é mais fácil distribuir o projeto.
Exemplo de trabalho:
Faça o download do projeto

Na pasta scripts, estão diretamente os scripts do projeto, para os quais esses 5 pacotes são necessários.
Iniciamos a instalação dos pacotes:

Após a instalação, a pasta vendor aparece, onde os pacotes instalados são adicionados e o arquivo autoload.php é formado

Conectamos esse arquivo ao projeto e pronto - as bibliotecas estão conectadas, você pode trabalhar com elas com segurança.

A simplicidade é óbvia: você não precisa baixar e conectar bibliotecas e suas dependências, o compositor fará tudo por você. E todo esse pacote está conectado a um único arquivo autoload.php
Todos os pacotes que estão no fornecedor são adicionados ao carregador automático. Ao fazer isso, o compositor depende dos arquivos composer.json, que todo pacote deve ter. A formação de um pacote composer.json é uma tarefa do desenvolvedor do pacote; o consumidor do pacote precisa apenas descrever no projeto composer.json quais pacotes precisam ser conectados.
Este é um exemplo de projeto composer.json:

Este é um exemplo de pacote composer.json:

Na seção de requisição, a dependência deste pacote é registrada - a biblioteca http guzzle, necessária para que a biblioteca getjump / vk funcione. Nesse caso, ou seja, do ponto de vista do consumidor de pacotes, todos os tipos de dependências de pacotes não são nossa "preocupação", o compositor descobrirá as próprias dependências.
O espaço para nome do pacote é registrado na seção de carregamento automático.

getjump \\ Vk \\ - nome do espaço para nome
src / getjump / Vk / - o diretório em que os arquivos com as classes de pacotes estão localizados
Trabalhe com esta biblioteca no projeto:

Core e Friends são classes de biblioteca dispostas e registradas na pasta src, de acordo com o padrão PSR-4. Novamente, moldar a estrutura do pacote é o trabalho do criador do pacote.
É suficiente para nós, como consumidores da embalagem, registrar-se em nosso projeto
inclua '../vendor/autoload.php';
e todas essas classes e namespaces funcionarão perfeitamente.
Nesse caso, não precisamos nos preocupar e escrever um carregador automático. O Composer fará isso sozinho ao executar o comando de instalação.
Instalação
Instale o Composer globalmente
1) Primeiro, você precisa que o caminho para o diretório com o interpretador PHP seja registrado no caminho da variável de ambiente.
Verifique se é assim:
php –version

Se a conclusão for assim, você pode pular esta etapa
Por exemplo, Windows 7
Sistema -> Configurações avançadas do sistema -> Avançado -> Variáveis de ambiente
A seguir, estaremos interessados na variável path:

Digite o caminho para o intérprete


* Desde os tempos antigos, eu tenho o assembly xampp no meu computador, o assembly em si não é necessário aqui, mas o intérprete é bastante adequado (versão PHP - 5.6).
2) Reinicie o terminal.
Crie um diretório e instale o compositor (eu coloquei no disco D)
D:
cd /
mkdir bin
bin bin
php -r "readfile ('https://getcomposer.org/installer');" | php
eco
php "% ~ dp0composer.phar"% *> compositer.bat

3) Adicione o caminho para composer.bat ao caminho da variável de ambiente; por exemplo, para D: \ bin, ele deve funcionar:

Adicionalmente pode ser adicionado ao caminho
D: \ Usuários \% userName% \ AppData \ Roaming \ Composer \ vendor \ bin \
para tornar mais conveniente o uso de ferramentas instaladas globalmente pelo Composer.
(Eu tenho a pasta Usuários localizada na unidade D e um link simbólico foi criado em C para ela).
É isso aí, o compositor está instalado e pronto para começar.
Outro: durante a instalação, você pode pegar um erro
[RuntimeException]
A variável de ambiente APPDATA ou COMPOSER_HOME deve ser configurada para que o compositor seja executado corretamente
A solução foi encontrada aqui
github.com/composer/composer/issues/2033Adicione a variável APPDATA com o valor D: \ Users \ GSU \ AppData \ Roaming

Instale o Composer localmente
Existe uma opção para instalar o compositor localmente, mas na maioria dos casos não há necessidade óbvia disso.
No entanto, a instalação é ainda mais simples aqui.
Porque Se o programa não está instalado globalmente, é necessário um arquivo de inicialização (mini-programa do compositor). Para carregá-lo, escrevemos o comando:
php -r "readfile ('https://getcomposer.org/installer');" | php
agora o arquivo composer.phar apareceu no diretório do projeto
Tudo pode ser usado.
php composer.phar requer [nome do pacote]
Diferenças entre instalação global e local
Os comandos são executados de maneira diferente para instalações locais e globais:
Por exemplo:
Localmente: php composer.phar requer silex / silex ~ 1.1
Globalmente: o compositor requer silex / silex ~ 1.1
Ao instalar localmente, é necessário fazer o download do arquivo de instalação para a pasta do projeto atual sempre
php -r "readfile ('https://getcomposer.org/installer');" | php
Em uma instalação global, esse arquivo não é necessário. O compositor inicia em qualquer diretório atual.
Equipas
install - instala os pacotes prescritos em composer.json
update - pacotes de atualização
dumpautoload - reconstruindo o carregador automático
exigir somepackage / somepackage: someversion - adicione um novo pacote (por padrão, os pacotes são instalados no repositório oficial). Durante a instalação, o pacote é gravado em composer.json
update --lock - atualiza o arquivo de bloqueio composer.lock
config --global cache-files-maxsize "2048MiB" - exemplo de alteração de um parâmetro de configuração
--profile - adicionar esse parâmetro a qualquer comando permitirá a exibição do tempo de execução e da quantidade de memória usada
--verbose - informações detalhadas sobre a operação que está sendo executada
show --installed - uma lista de pacotes instalados com uma descrição de cada
show --platform - informações em PHP
--dry-run - ensaio de execução de comandos. Pode ser adicionado para instalar e atualizar comandos. Emula a execução de um comando sem executá-lo diretamente. É necessário verificar se a instalação de pacotes e dependências é bem-sucedida.
remover - remova a embalagem. Exatamente o oposto de exigir
Sintaxe composer.json
Opções de nomeação e descrição de pacotes
O nome do pacote consiste em duas partes separadas por uma barra: o nome do fornecedor e o nome da biblioteca.

Se o pacote foi projetado de acordo com o padrão PSR-4, mas não está publicado no packagist.org, mas no github, em vez da versão do pacote, você precisa registrar uma filial e um repositório para este pacote:

Um exemplo de conexão de uma biblioteca que fica no github, mas não é enquadrada pelo padrão PSR-4, mas é uma pilha comum de arquivos com classes e funções.
Visualização de amostra:

Pqr / superlib - esta é a mesma biblioteca "errada".
Na seção de repositórios, escrevemos essa construção para ele

O ponto principal é a seção de carregamento automático, aqui especificamos os arquivos que precisamos com classes e funções.
Estrutura da biblioteca:

Conteúdo do arquivo:


Assim, no projeto, a chamada para getCurrentTime () será algo como isto:
$ timer = novo pqr \ superlib \ TimerClass;
echo $ timer-> getCurrentTime ();
Versionamento
Ao especificar versões válidas de pacotes, você pode usar a correspondência exata (1.2.3), intervalos com operadores de comparação (<1.2.3), combinações desses operadores (> 1.2.3 <1.3), "última disponível" (1.2. *), Símbolo de til (~ 1.2.3) e a marca de inserção (^ 1.2.3).
A indicação do til (~ 1.2.3) incluirá todas as versões até 1.3 (não inclusivas), pois na versão semântica, este é o momento de introduzir novas funcionalidades. Nesse caso, a última das versões secundárias estáveis será obtida. I.e. Somente o último dígito será alterado - 1.2.5, 1.2.8 etc.
A indicação de um sinal de inserção (^ 1.2.3) significa literalmente "cuidado com as alterações críticas apenas" e incluirá versões até 2.0. No que diz respeito ao controle de versão semântico, uma mudança na versão principal é o momento de fazer alterações críticas no projeto, portanto as versões 1.3, 1.4 e 1.9 são adequadas, enquanto o 2.0 não está mais lá.
I.e. somente o primeiro dígito não muda.
Tilda: ~ 1.2.3 é a maneira mais comum e segura de especificar uma versão.
Arquivo composer.lock
O arquivo composer.lock salva a lista atual de dependências instaladas e suas versões. Portanto, no momento em que as versões das dependências já estiverem atualizadas (comando update), outras pessoas que clonarão seu projeto receberão as mesmas versões. Isso permite garantir que todos os que recebem seu projeto tenham um ambiente em lote idêntico ao que você usou durante o desenvolvimento e ajuda a evitar erros que possam surgir devido a atualizações de versão.
Cada vez que o comando update é executado, as versões dos pacotes atualizados são registradas em composer.lock. Esse arquivo é enviado por push no sistema de controle de versão e, ao instalar pacotes no novo servidor, as versões dos pacotes registradas nesse arquivo serão entregues. Ao executar o comando de instalação, o compositor dependerá principalmente do compositer.lock. Portanto, o mesmo ambiente de pacote em termos de versões será garantido para instalação em servidores diferentes.
Além disso, o arquivo composer.lock contém um hash do arquivo composer.json.
E se o arquivo json tiver sido editado, o compositor avisará que o arquivo de bloqueio não corresponde ao arquivo json.
Nesse caso, você precisa executar o comando compositer update --lock, que atualizará o composer.lock.




A diferença entre instalar e atualizar no contexto do uso de composer.lock
O comando de
instalação do compositor faz o seguinte:
Verifica se o composer.lock existe:
- caso contrário, resolve as dependências e as cria
- se o composer.lock existir, instala as versões especificadas nele
Comando de
atualização do compositor :
- Verifica compositer.json
- Determina as versões mais recentes com base nas especificadas neste arquivo
- Instala as versões mais recentes
- Atualiza o composer.lock de acordo com os
Exemplo de uso do ponto de vista do criador do projeto
Existe um projeto sem pacotes instalados

Coloque algumas bibliotecas


Formamos composer.json com informações do pacote

Podemos complementá-lo e distribuir o projeto com este arquivo.

Outro usuário baixou nosso projeto, instalou a instalação e todos os pacotes necessários foram implantados em seu projeto.

Exemplo de uso da perspectiva do criador do pacote
Por exemplo, criei uma classe com um método que exibirá o URL da página atual

A classe é projetada como um pacote e carregada no github.


Compilado por compositer.json

Eu me registro no escritório. repositórios e adicione um pacote, indicando um link para o repositório no qual ele se encontra

Todo o pacote adicionado


Verifico a funcionalidade do pacote

O pacote foi entregue, aqui está a nossa classe:

Chame o método

Está tudo bem.

Compositor e PhpStorm
Inicialização




Configurando os recursos de edição de pacotes do Composer

Se a opção estiver definida, não será tão fácil obter e editar arquivos dentro do fornecedor / * / *
Instalação do pacote





Nuances, sutilezas, situações difíceis
Erro: Aviso: O arquivo de bloqueio não está atualizado com as alterações mais recentes no composer.json. Você pode estar recebendo dependências desatualizadas. Execute a atualização para atualizá-los. Nada para instalar ou atualizar
Solução: atualização do compositor --lock
A atualização leva muito tempo com um grande número de bibliotecas instaladas
O Composer verifica todas as dependências dos pacotes e, se houver muitos pacotes, será um longo período de tempo.
Solução: se você precisar atualizar apenas uma biblioteca, especifique-a explicitamente:
nome / pacote de atualização do compositorVocê também pode adicionar o parâmetro "--prefer-dist" (embora, em teoria, deva ser ativado por padrão), o compositor tentará instalar a biblioteca do arquivo zip, em vez de clonar o repositório.
Não foi possível fazer o download do arquivo "****. Json": falha ao abrir o fluxo: a solicitação HTTP falhou!
O compositor está tentando extrair o pacote sobre HTTP, embora precise sobre HTTPS
Solução: config do compositor -
global repo.packagist compositer
packagist.orgO pacote não está disponível em uma versão suficientemente estável, de acordo com sua configuração de estabilidade mínima
veja para mais detalhes.
O pacote não possui uma versão estável e a instalação da versão dev não é permitida na configuração.
Solução: defina o parâmetro "minimum-stable": "dev" e "prefer-stable": true para colocar as versões estáveis possíveis ou - se esse for o seu próprio pacote - crie uma tag com a versão (o adesivo estável no leia-me no github deve mostrar versão)
Histórico de desenvolvimento e principais mudanças
- a primeira versão ocorreu em 1º de março de 2012 e toda a ferramenta de 2012 está desenvolvendo ativamente
- janeiro de 2014 - implementado o carregamento automático baseado no PSR-4
- março de 2016 - a versão beta (1.0.0-beta1) foi lançada. Adicionados comandos show --tree para exibir pacotes instalados em uma árvore, por que não - mostra por que é impossível instalar um pacote, update --interactive - permite escolher quais pacotes atualizar, além de muitas outras melhorias e correções.
- 4 de abril de 2016 - a primeira versão estável do Composer foi lançada - 1.0.0
Dezembro de 2014 - uma das principais confirmações no repositório do compositor
github.com/composer/composer/commit/ac676f47f7bbc619678a29deae097b6b0710b799
A essência da mudança - coletor de lixo desativado

habrastorage.org/getpro/habr/comment_images/db3/59a/972/db359a972df6730e52f292b5c52095b8.gifReferências
Fora do site: getcomposer.org
Repositório oficial do pacote: packagist.org
Repositório do compositor:
github.com/composer/composerTutorial do Great Composer:
daylerees.com/composer-primerLista de comandos e um exemplo detalhado do arquivo
composer.json :
composer.json.jolicode.com