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.
callAfterResolving() y cómo diseñar para tolerar aplicaciones repetidas.
Para registrar servicios que no arrastren estado ni en Octane ni en los workers de colas, consulta Diseño del ciclo de vida de los servicios de paquetes. Allí se explica la implementación interna de scoped() y las precauciones con las dependencias que retiene un singleton.
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 registrar los archivos de migración para publicarlos. En la configuración estándar de Laravel 13, database.migrations.update_date_on_publish está activado, por lo que la marca de tiempo del nombre de archivo se actualiza al publicar. Si el ajuste está desactivado o no existe, esta actualización no se realiza.
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.
El orden de búsqueda real en la implementación, el fallback archivo por archivo, cómo hacer llegar los cambios a las plantillas publicadas y la diferencia con la caché de Blade se explican en Sobrescritura y actualización de vistas de paquetes.
Publicar las vistas
Registrar componentes Blade
Si el paquete incluye componentes, regístralos en el métodoboot.
Distribución de assets públicos
Para distribuir el JavaScript, el CSS y las imágenes del paquete, registra conpublishes() la copia a una ruta como public_path('vendor/courier'). Aunque actualices el paquete, los archivos ya publicados no cambian automáticamente.
El filtrado por etiquetas y providers, la diferencia entre --force y --existing, el tratamiento de los archivos eliminados y la actualización mediante laravel-assets se explican en Assets públicos de paquetes y su actualización.
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().
--except, el orden de ejecución respecto a las tareas estándar y el código de salida en caso de fallo se explican en Caché de paquetes e integración con optimize.
Añadir información al comando about
Para añadir información del paquete a la salida de php artisan about, utiliza AboutCommand::add().
--only y la salida JSON, cómo evitar exponer secretos y cómo manejar el estado de registro en las pruebas.
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.