Como criar e publicar uma biblioteca própria no Composer
Nesse tutorial estarei ensinando detalhadamente como criar a estrutura para distribuição de uma biblioteca para instalação via Composer.
Antes de começar
Para continuar se dar bem com esse passo a passo, você precisa ter um considerável conhecimento sobre ferramentas de versionamento GIT "Git - Ferramenta de Versionamento". Além disso, é importante ter instalado na sua máquina o Composer.
Crie a conta no Packagist
A primeira coisa que deve ser feita é ter uma conta no Packagist. Esse passo é necessário, pois é aqui onde o Composer busca as informações da sua biblioteca.
Github
O próximo passo é você criar um repositório no Github. Crie o repositório como público. Você pode fazer isso clicando aqui "Criar um repositório no Github".
DICA: Para um pacote chamado
vendor_name/library_name
no Packagist, seria importante que o seu repositório no Github chamasselibrary_name
.
Criando a estrutura da biblioteca e iniciando o repositório
Crie o diretório para sua biblioteca. Como exemplo, vamos criar uma pasta chamada library_name
.
Exemplo:
mkdir library_name
cd libray_name
Em seguida, inicie o repositório GIT e adicione a origem remota, apontando para o repositório que você criou no Github.
Código:
git init
git remote add origin https://github.com/vendorname/libraryname.git
Agora é necessário criar o arquivo composer.json
dentro dela. Para utilizar sua biblioteca no Composer, é necessário que esse arquivo esteja na raiz do seu projeto. Ele contém as informações relevantes para que sua biblioteca seja processada, como, por exemplo, o nome e a descrição da sua biblioteca.
Podemos criar esse arquivo de duas formas...
Criando o composer.json iterativamente pela linha de comando
Você pode criar o composer.json
através do comando composer init
. Esse comando roda interativamente. Você precisa preencher as informações, conforme a necessidade.
A imagem abaixo ilustra as informações preenchidas.
Criando o composer.json manualmente
Caso você prefira, você também pode criar seu arquivo composer.json
manualmente. Abaixo você pode usar esse modelo com as informações essenciais para o funcionamento da sua biblioteca.
Exemplo:
{
"name": "vendorname/libraryname",
"description": "Minha Biblioteca",
"type": "library",
"license": "MIT",
"authors": [
{
"name": "Seu e-mail",
"email": "seu@email.com"
}
],
"minimum-stability": "stable",
"require": {}
}
Escolhendo o namespace da sua biblioteca
No composer, o nome da biblioteca é composto por Vendor Name e Package Name. Você deve defini-lo na propriedade name
do composer.json
. Da mesma forma, o namespace
usado na biblioteca seguirá o mesmo padrão do nome da biblioteca.
Vendor Name
Esse é nome do "fornecedor" da biblioteca. É comum nas bibliotecas do Composer utilizar o Vendor Name como primeiro segmento do seu namespace.
Por exemplo, como utilizamos o nome vendorname
, o namespace principal das bibliotecas desenvolvidas deve ser VendorName
.
Library Name
O Library Name é o nome da biblioteca. Esse nome vem depois do Vendor Namespace, após a barra. No nosso exemplo, como criamos o nome libraryname
para a biblioteca, o namespace utilizado deve ser VendorName\LibraryName
.
Sendo assim, seu namespace será:
namespace VendorName\LibraryName;
// restante do código ...
Estrutura das pastas
Vamos começar a criar os arquivos da biblioteca. Dentro de library_name
, precisamos criar os seguintes arquivos e pastas:
library_name/
.gitignore
composer.json
src/
Hello.php
Na pasta src
é o local onde ficarão os scripts da biblioteca. Crie a pasta src
e crie um script chamado src/Hello.php
. Vamos definir o seguinte conteúdo para nosso arquivo:
namespace VendorName\LibraryName;
class Hello
{
public function say()
{
echo "Hello!";
}
}
Crie o arquivo .gitignore
, para configuramos os arquivos que não farão parte do nosso repositório GIT. A pasta vendor
deve ser adicionada nele.
Exemplo:
/vendor/
Configurando o autoloader
O arquivo composer.json
já foi criado anteriormente. Precisamos definir a configuração do autoload da biblioteca. Vamos utilizar o padrão PSR-4.
Adicione a seguinte linha ao seu composer.json
:
"autoload" : {
"psr-4" : {
"VendorName\\LibraryName\\" : "src/"
}
}
Em psr-4
, temos que definir uma chave e um valor. A chave representa o namespace
principal da sua biblioteca. O valor
é a pasta onde os scripts
estão localizados.
Testando o autoload
Para testar, primeiro rode o comando composer dump
. Isso vai gerar uma pasta chamada vendor
no seu projeto, com o autoloader das classes do seu projeto.
Em seguida, crie um arquivo chamado teste.php
na raiz do projeto e cole o seguinte código
require __DIR__ . '/vendor/autoload.php';
use VendorName\LibraryName;
$hello = new Hello;
$hello->say();
Execute-o na linha de comando.
php teste.php
Se você receber a saída "Hello!", isso significa que seu autoload está correto.
O arquivo não faz parte do repositório, então você pode removê-lo ou adicioná-lo ao seu
.gitignore
Enviando as alterações para o repositório remoto
Se você fez todas as confirmações acima, agora você já pode atualizar o repositório remoto com os arquivos da sua biblioteca.
Faça assim:
git add .
git commit -m "primeiro commit"
git push -u origin master
Adicionando o repositório ao Packagist
Agora, você precisa submeter a sua biblioteca para o Packagist, através desse link.
Você precisa adicionar o URL do repositório do Github no campo Repository URL, conforme a imagem abaixo.
Configurando o TOKEN API no Packagist
Depois da submissão, é necessário inserir o seu TOKEN API do Packagist nas configurações do seu repositório do Github.
Para fazer isso, acesse a opção Settings > Webhooks > Add Webhook do seu repositório, conforme a imagem abaixo.
Em seguida, você terá acesso a um formulário de cadastro do Webhook, conforme a imagem abaixo:
No campo Payload URL, adicione o endpoint do Packagist. Ela é responsável por receber as informações atualizadas do Github, toda vez que um push for feito no repositório da sua biblioteca.
Exemplo:
https://packagist.org/api/github?username=seu_usuario_packagist
No campo Content Type, selecione a opção application/json
.
Em SSL verification, deixe marcado Enable SSL verification.
Em Secret, adicione o token do Packagist. Ele pode ser encontrado nesse link, conforme a imagem abaixo:
Basta clicar em Show API Token para visualizá-lo. Copie e cole no campo Secret. Em seguida, clique no botão Add Webhook.
Instalando sua biblioteca
Depois de fazer tudo isso, você já poderá testar se sua biblioteca está funcionando corretamente utilizando o comando composer require
.
Exemplo:
composer require vendorname/libraryname
Como funciona o versionamento no Composer?
Para você definir uma release (versão de lançamento) para sua biblioteca, você deve usar uma git tag. Você basicamente usa o comando git tag
para criar uma tag com o nome da versão.
Caso você ache que sua biblioteca está pronta para o uso, você pode definir uma tag.
Assim:
git tag 0.0.1
Depois, para enviá-la ao seu repositório, você precisa rodar o comando:
git push --tags
NOTA: As tags precisam seguir o padrão do Composer. Geralmente, trata-se dos 3 conjuntos de números separados por ponto (
.
).