Qué es un paquete
En Laravel, un paquete es un paquete de Composer que añade funcionalidad a la aplicación. Hay dos tipos principales.- Paquete independiente — biblioteca PHP de propósito general que no depende de Laravel (por ejemplo: Carbon, Pest).
- Paquete de Laravel — paquete que ofrece funciones integradas con Laravel, como rutas, controladores, vistas o configuración.
Si vas a escribir pruebas para el paquete, utiliza Orchestra Testbench. Podrás escribir las pruebas del paquete igual que en una aplicación Laravel normal.
Detección automática de paquetes
Cuando instalas un paquete, Laravel lee la secciónextra.laravel de composer.json y registra automáticamente los service providers y las fachadas.
bootstrap/providers.php a mano.
En Estructura interna de la detección automática de paquetes se explica cómo se implementa esta detección automática y cuándo se reconstruye la caché.
Desactivar la detección automática
Si el usuario quiere desactivar la detección automática de un paquete concreto, puede configurarlo en elcomposer.json de la aplicación.
El papel del service provider
El service provider es el punto de entrada del paquete. Aquí es donde concentras el registro de recursos como vistas, configuración, migraciones o rutas en Laravel. Un service provider extiendeIlluminate\Support\ServiceProvider y dispone de dos métodos: register y boot.
Publicación de archivos de configuración
publishes() — publicar archivos
Si llamas apublishes() dentro del método boot, el usuario podrá copiar el archivo de configuración a su aplicación mediante el comando vendor:publish.
config.
mergeConfigFrom() — fusionar con los valores por defecto
Si utilizasmergeConfigFrom() en el método register, los valores por defecto del paquete se aplicarán aunque el usuario no haya publicado el archivo de configuración.
Separar grupos de publicación mediante etiquetas
Si pasas una etiqueta como segundo argumento apublishes(), el usuario podrá publicar solo los recursos que necesite.
Registro de rutas
UtilizaloadRoutesFrom() para cargar el archivo de rutas. Si la caché de rutas de la aplicación está activa, se omite automáticamente.
Publicación de migraciones
ConpublishesMigrations() puedes publicar los archivos de migración. Al publicar, Laravel actualiza automáticamente las marcas de tiempo.
Publicación de vistas
loadViewsFrom() — registrar vistas
Registra el directorio de vistas conloadViewsFrom(). El segundo argumento es el espacio de nombres, que se utiliza para referenciar las vistas con el formato paquete::vista.
resources/views/vendor/courier de la aplicación y, si no existe, utiliza el directorio de vistas del paquete. Esto permite al usuario personalizar las vistas.
Publicar las vistas
Registrar componentes Blade
Si el paquete incluye componentes, regístralos en el métodoboot.
Publicación de archivos de traducción
Registra los archivos de traducción conloadTranslationsFrom(). Las traducciones se referencian con el formato paquete::archivo.clave.
loadJsonTranslationsFrom().
Registro de comandos
Los comandos Artisan del paquete se registran con el métodocommands(). Lo habitual es registrarlos solo en el entorno de consola.
Integración con el comando optimize
Si el paquete tiene su propia caché, puedes integrarlo con php artisan optimize y php artisan optimize:clear mediante el método optimizes().
Añadir información al comando about
Para añadir información del paquete a la salida de php artisan about, utiliza AboutCommand::add().
Creación de fachadas
Las fachadas permiten invocar los bindings del service container como si fueran métodos estáticos.1
Crea la clase de servicio
2
Crea la clase de fachada
Extiende
Illuminate\Support\Facades\Facade y devuelve la clave del binding del service container en getFacadeAccessor().3
Vincúlala en el service provider
4
Regístrala en composer.json
@method a los métodos de la fachada, se habilita el autocompletado del IDE.
DeferrableProvider — implementar la carga diferida
Los providers que solo realizan bindings al service container pueden implementar la interfazDeferrableProvider para lograr una carga diferida. Como el provider no se carga hasta que un servicio se necesita realmente, mejora el rendimiento de la aplicación.
provides().
Pruebas del paquete
Para probar el paquete por separado, utiliza Orchestra Testbench. Podrás escribir las pruebas del paquete como si estuvieras dentro de una aplicación Laravel normal.getPackageProviders() para registrar el service provider del paquete.
Publicación en Composer
Buenas prácticas para publicar el paquete en Packagist. Configuración básica decomposer.json
Páginas relacionadas
Service providers
Revisa los métodos
register y boot de los service providers y los detalles de los providers diferidos.Gestión de compatibilidad de versiones
Explica la estrategia para adaptarse a los cambios de versión mayor de Laravel y PHP y la configuración de la matriz de pruebas en GitHub Actions.