Aprenda como distribuir seus pacotes PHP com Packagist

Você desenvolveu um lindo pacote PHP no qual você colocou sua alma e coração e do qual se orgulha. Agora é a hora da distribuição, e uma parte importante é garantir que você forneça aos outros o caminho mais fácil possível para baixar e utilizar seu pacote, mas como?

Felizmente, para isso existe o Packagist, um repositório de fato gratuito para todas as dependências de pacotes PHP. Aprenda como obter seu pacote PHP listado no Packagist, permitindo que outros baixem e instalem com um comando.

Estruture Seu Pacote Adequadamente

Antes da distribuição, seu pacote precisa ser estruturado corretamente e deve utilizar namespaces. Escolha um namespace raiz para o seu pacote. Pode ser o que você desejar, mas geralmente é aconselhável usar Author PackageName .

Por exemplo, o namespace JSmith BlogPoster informaria aos outros que o desenvolvedor do pacote atende pelo nome Jsmith e este é o pacote denominado BlogPoster .

Com o namespace raiz decidido, crie um diretório / src / em seu projeto e mova todos os arquivos PHP para ele. Cada arquivo deve ter a declaração apropriada no topo, então todos os arquivos PHP dentro do diretório / src / devem começar:

 
<?php
namespace JSmithBlogPoster;

A declaração do namespace é relativa à estrutura do diretório. Por exemplo, se você tiver um arquivo em /src/Images/Uploader.php, na parte superior do arquivo você terá:

 
<?php
namespace JSmithBlogPosterImages;
class Uploader
{
}

Por último, certifique-se de que a declaração de classe de todos os arquivos PHP é igual ao nome do arquivo, como mostra o exemplo acima. O arquivo Uploader.php tem o nome de classe Uploader .

Registre uma conta Packagist

Se você ainda não tem uma, crie uma conta Packagist , é rápido e grátis. Embora não seja obrigatório, é prática padrão registrar-se com o mesmo nome de usuário do namespace raiz que você decidiu na seção acima. Se esse nome de usuário não estiver disponível, escolha algo semelhante.

Você não precisa fazer nada com a conta Packagist ainda, mas é útil tê-la pronta.

Criar arquivo composer.json

Abra um editor de texto e, no diretório raiz do seu projeto, crie um arquivo composer.json , com o seguinte conteúdo usado como exemplo:

 
{
"name": "jsmith/blogposter",
"description": "An excellent blog posting package...",
"type": "package",
"homepage": "https://yourdomain.com",
"license": "MIT",
"require": {
"php": ">=8.0.0"
},
"autoload": {
"psr-4": {
"JSmithBlogPoster": "src/"
}
}
}

Existem apenas dois aspectos importantes do arquivo acima a serem observados.

O primeiro é o elemento de nome na parte superior. Deve ser duas strings separadas por uma barra, a primeira sendo seu nome de usuário do Packagist e a segunda sendo o nome desejado do pacote. Usando o exemplo acima, o nome de usuário do Packagist é jsmith e o nome do pacote é blogposter .

Em segundo lugar, na parte inferior da seção autload , você notará a linha:

 "JSmithBlogPoster": "src/"

Modifique esta linha para que o namespace raiz que você decidiu anteriormente aponte para o diretório / src /. Quando seu pacote é instalado por outra pessoa, o Composer mapeia automaticamente seu namespace raiz para o subdiretório em que seu pacote foi instalado.

Envie seu pacote para o Github

Você precisa enviar seu pacote PHP para um repositório Github, pois esse é o principal método de integração que o Packagist usa. Se você ainda não está familiarizado com a criação e publicação em um repositório Github, consulte Como criar seu primeiro repositório no GitHub para um excelente guia passo a passo.

Certifique-se de fazer upload de todo o pacote PHP, incluindo todos os arquivos em / src / e o arquivo composer.json. Se você deseja simplesmente fazer upload de todo o diretório do projeto para o GitHub, abra um terminal dentro do diretório do seu projeto e execute:

 git add ./*
git commit -m "Initial commit"
git push -u origin master

Você também deve adicionar uma tag ao repositório GitHub, pois as tags são como o Packagist mantém o controle de lançamentos e números de versão de seus pacotes. Para marcar o repositório atual como v0.1, execute os comandos:

 git tag 0.1
git push --tags

Adicionar uma lista de PHP no Packagist

Tudo está pronto agora, então com um sorriso você pode seguir em frente e enviar seu pacote PHP para listagem instantânea no Packagist. Visite a página Enviar pacote e insira o URL do seu repositório GitHub, que será algo como:

 https://github.com/jsmith/blogposter.git

Clique no botão Verificar envio e o Packagist fará o download do arquivo composer.json do seu repositório, além de quaisquer tags / lançamentos disponíveis e outras informações.

A próxima página irá confirmar que você deseja publicar o pacote; uma vez confirmado, você poderá visualizar sua nova lista do Packagist em um URL como:

 https://packagist.org/packages/jsmith/blogposter

Instale seu pacote com o Composer

Experimente e instale seu pacote PHP com o Composer. Se você ainda não instalou o Composer, pode instalá-lo com o seguinte comando:

 sudo curl -sS https://getcomposer.org/installer | sudo php -- --install-dir=/usr/local/bin --filename=composer

Crie um novo diretório e, dentro dele, execute o comando:

 composer require jsmith/blogposter

O Composer fará sua mágica, e você notará um novo / vendor / subdiretório que aparecerá, se você olhar dentro dele, verá seu pacote PHP!

Faça um teste e carregue seu pacote PHP. Usando o exemplo acima, se houvesse um arquivo /src/Blogger.php no pacote, um script de teste rápido para carregá-lo seria:

 
<?php
use JSmithBlogPosterBlogger;
// Load composer dependences
require("./vendor/autoload.php");
// Get blogger
$client = new Blogger();
echo "Got a " . $client::class . "
";

Vá em frente e compartilhe com o mundo

Agora você aprendeu como é fácil estruturar seu pacote PHP apropriadamente e listá-lo no Packagist, permitindo que qualquer pessoa no mundo baixe instantaneamente e inclua seu pacote em seu projeto com um único comando.

Parabéns, agora você abriu seu pacote PHP no canal de distribuição principal dentro do ecossistema PHP. Vá em frente e compartilhe sua criatividade e trabalho árduo com o mundo.