Vamos iniciar criando nosso primeiro pacote em Laravel para ser instalado através do composer, armazenado no packagist.
Primeiro passo é criar uma pasta num ambiente que esteja instalado o PHP e o Composer.
No meu caso a pasta chama-se bitethedust-laravel, é isso mesmo é as capacidades de gerenciar srcset, redimensionar arquivos e convertê-los para webp sendo integrada através desse pacote intermediário que fará a conexão entre a minha library e o framework Laravel.
Após criar a pasta vamos rodar o comando no terminal:
composer init
O composer fará uma série de perguntas, que seria bem interessante respondê-las para gerar a primeira versão do seu composer.json .
Após concluir essa etapa vamos abrir o composer.json e adicionar um trecho extra do nossa nova library.
"extra": {
"laravel": {
"providers": [
"sysborg\\LaraBTD\\Provider\\LaraBTDServiceProvider"
]
}
},
Nesse trecho estou falando que tem configurações extras e avisando ao laravel que tem um provider nesse namespace, assim ele executará e registrará nossa instância do btd para trabalharmos com srcset.
No meu caso o composer.json ficou da seguinte forma:
https://github.com/sysborg/bitethedust-laravel/blob/main/composer.json
Feito isso devemos definir o que utilizaremos do Bite the Dust e portabilizaremos para fácil uso no Laravel.
Bite The Dust usava bem o conceito de orientação a objeto, onde cada instância tratava exclusivamente 1 arquivo original por vez, criei uma adaptação para isso, onde as configurações do arquivo podem ser trocadas na mesma instância ou criada na construção da instância, assim evitando que o construtor recebesse um valor dinâmico o que dificultaria o uso dos providers.
Criei um service provider na minha library chamado LaraBTDServiceProvider que registra o serviço no Laravel, utilizando o método $this->app->singleton para não instanciar toda hora a classe já que agora é possível alterar as configurações enquanto está em execução.
O código do Service Provider abaixo.
<?php
namespace sysborg\LaraBTD\Provider;
use Illuminate\Support\ServiceProvider;
use sysborg\btd;
class LaraBTDServiceProvider extends ServiceProvider
{
public function register()
{
$this->app->singleton('larabtd', function ($app) {
return new btd();
});
}
}
Feito isso vamos no nosso pacote fazer o Laravel descobrir o nosso Service Provider executando o comando
No meu caso como ainda estava em teste eu colei os arquivos na pasta vendor do meu aplicativo Laravel e fiz os seguintes comandos.
Como é uma library em desenvolvimento vamos utilizar alguns recursos para testarmos sem publicar algo que não esteja funcional.
Vamos alterar o composer.json do sbblog e adicionar o seguinte trecho no final dele.
"repositories": [
{
"type": "path",
"url": "vendor/sysborg/bitethedust-laravel"
}
]
Esse comando adicional no composer.json vai fazer com que o composer seja capaz de encontrar a nossa library, eu copiei o pacote que estava desenvolvendo para dentro da pasta vendor do sbblog, feito isso precisamores instalar esse pacote.
composer require sysborg/bitethedust-laravel
No caso substitua sysborg/bitethedust-laravel pelo nome do seu pacote.
Depois disso acessei fácilmente o Bite the dust com o seguinte comando:
app('larabtd')
Para publicar não tem muita dificuldade, basta que seu código esteja em um repositório por exemplo Github e você tenha uma conta no packagist.
Basta clicar em submit, adicionar a url do seu repositório, ele vai detectar automaticamente o nome da sua library acontecendo isso clique em confirmar e o pacote estará criado.
Para poder fazer atualização automática basta seguir o tutorial do próprio packagist.
https://packagist.org/about#how-to-update-packages
Depois de publicado você pode remover o pacote, remover o repositories do composer.json do seu projeto e então fazer a instalação tradicional para testar seu funcionamento.
Espero que tenha te mostrado alguma coisa legal, fiquei super entusiasmado fazendo essa primeira integração simples que é só um pinguinho no oceano de possibilidade de Services e Services Provider do Laravel.
Vejo vocês numa próxima.
Até mais.
Matheus Gonçalves Sicchieri
24/11/2023 11:32Show de bola, bem explicado