AndersonArruda

Artigos de tecnologia ao alcance de um clique!


Laravel Primeiro Pacote Autodiscover
laravel sysborg bite the dust service provider service packagist composer library meu primeiro pacote laravel package

Laravel Primeiro Pacote Autodiscover

24/11/2023 00:12

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 .


  1. O nome do pacote, no meu caso coloquei sysborg/bitethedust-laravel
  2. Uma descrição para seu pacote, algo que ajude as pessoas a encontrá-lo, coloquei algo similar com o comentário acima sobre juntar o Bite The Dust com o universo do Laravel.
  3. Author, coloque meu nome.
  4. Minimum stability: coloque stable
  5. Package type, tem vários tipos de pacotes, no meu caso usei library pois meu pacote não se trata de um aplicativo completo, mas sim de bibliotecas reutilizáveis em outros projetos.
  6. License, veja a licença que mais faz sentido pra você no meu caso usei a do MIT
  7. Coloque sim, para definir as depêndencias do meu projeto, caso não queira fazer isso agora coloque não, no meu caso já tinha as depêndencias bem definidas.
  8. php >=8.2
  9. sysborg/bitethedust >=1.4
  10. laravel/framework >=9.0
  11. Para dependências de desenvolvimento eu coloquei não uma vez que nessa library não terá dependências exclusivas de dev.
  12. Adicionei o PSR-4 para autoload do pacote, apenas clicando enter.
  13. Basta confirmar o composer.json que aparecerá no termina e a primeira etapa da library estará concluída.


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.


Mudanças no Bite The Dust

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.


Service Provider

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.

https://packagist.org/


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.

Espaço para publicidade
1 Comentário(s)
Matheus Gonçalves Sicchieri
24/11/2023 11:32

Show de bola, bem explicado

Todos os direitos reservados. © 2021-2031
SBBlog Powered By Powered By Sysborg | Powered By Anderson Arruda