Esta página es hermana de Fundamentos del desarrollo de paquetes. Se asume conocimiento básico del desarrollo de paquetes (service providers, estructura de
composer.json, etc.).Adaptarse a las nuevas versiones mayores de Laravel
Flujo de la migración
Actualiza require en composer.json
Añade la nueva versión al rango de dependencias. Si sigues dando soporte a las anteriores, concaténalas con Cuando finalices la adaptación y quites el soporte a las versiones antiguas, elimina las restricciones que ya no correspondan.
||.Ejecuta los tests contra la nueva versión
En local o en el entorno CI, ejecuta los tests con la nueva versión de Laravel.Si los tests pasan, has confirmado la compatibilidad básica. Si no, corrige las APIs modificadas o los métodos eliminados.
Añade la nueva versión a la matriz de tests de GitHub Actions
Añade la nueva versión de Laravel a la matriz de CI para vigilar de forma continua la compatibilidad. Consulta el ejemplo de matriz de tests.
Toma como referencia los paquetes oficiales
Cuando dudes sobre cómo adaptarte, lo más fiable es revisar elcomposer.json de los paquetes oficiales de Laravel.
Estos paquetes los mantiene el equipo de Laravel, así que se adaptan muy rápido a las nuevas versiones y son un buen ejemplo de cómo escribir las restricciones de illuminate/*.
Actualización del requisito de PHP
Al subir de versión, Laravel también suele elevar el requisito mínimo de PHP. Ajusta el requisito de PHP en elcomposer.json de tu paquete.
| Laravel | PHP mínimo |
|---|---|
| Laravel 11 | PHP 8.2 |
| Laravel 12 | PHP 8.2 |
| Laravel 13 | PHP 8.3 |
| Laravel 14 | PHP 8.4 |
Si quieres usar las nuevas funciones de PHP
Para utilizar funciones a partir de PHP 8.3 (constantes tipadas, nuevas funciones de aleatoriedad, etc.), tendrás que subir el requisito mínimo. Elevar el requisito mínimo es, según el versionado semántico, un cambio rompedor, por lo que es más adecuado hacerlo en una nueva versión mayor de tu paquete.Estrategia para retirar el soporte a versiones antiguas
Mantener versiones antiguas indefinidamente eleva mucho el coste de mantenimiento a largo plazo. Establecer una política de soporte clara y retirar versiones antiguas de forma periódica es lo que sostiene un paquete saludable.Cuándo retirar el soporte
Un enfoque habitual es alinearse con el ciclo de soporte de Laravel. Laravel ofrece 18 meses de correcciones de bugs y 2 años de correcciones de seguridad por versión. Si tu paquete adopta una política parecida, será más fácil de entender para los usuarios.| Criterio | Descripción |
|---|---|
| Fin de soporte oficial de Laravel | Retira la compatibilidad cuando termina el soporte oficial de esa versión de Laravel. |
| Uso real | Cuando los datos de descarga de Packagist muestran que los usuarios de la versión antigua son pocos. |
| Coste de añadir funcionalidad | Cuando dar soporte a la versión antigua complica implementar nuevas funcionalidades. |
Declara la política de soporte en el README
Para que los usuarios tengan expectativas realistas, incluye la política de soporte enREADME.md.
El coste de mantener versiones antiguas
Mantener el soporte a versiones antiguas conlleva estos costes:- Doble corrección de bugs — hay que arreglar el mismo bug en varias ramas.
- Aumento del código condicional — complejidad para absorber en condicionales las diferencias entre versiones.
- Matriz de tests inflada — el tiempo de CI crece.
- Complicación de los parches de seguridad — hay que hacer backport seguro también a las versiones antiguas.
Ventajas de reaccionar pronto
Si tienes la adaptación lista a la vez que sale la nueva Laravel, los usuarios podrán migrar de inmediato. Es una señal importante de la fiabilidad de tu paquete.Prueba previa con la versión de desarrollo
Laravel no publica beta/RC, pero puedes instalar la próxima versión condev-master o @dev. Al confirmar el comportamiento antes de la release mayor, puedes conseguir compatibilidad «día cero».
@dev.
minimum-stability a dev, puedes resolver las dependencias con la versión de desarrollo.
El primer paso puede ser solo cambiar composer.json
Aun antes de tener la compatibilidad totalmente verificada, con solo actualizar el rango de dependencias encomposer.json y publicar la nueva versión, los usuarios ya pueden instalar tu paquete.
Cómo seguir la información de releases
Métodos para enterarte a tiempo de las nuevas versiones:| Fuente | Contenido |
|---|---|
| Watch de GitHub | Actívalo en el repositorio: «Watch → Custom → Releases» para recibir notificaciones por correo. Registra también los paquetes principales aparte del framework. |
| Blog oficial de Laravel | Anuncios de releases mayores y descripción de nuevas funciones. |
| Guía oficial de actualización | Lista de cambios rompedores. |
| Log de commits de laravel/framework | Para adelantarte a la próxima versión, sigue directamente los commits. |
Ejemplo de configuración de la matriz de tests
Ejemplo de workflow de GitHub Actions que ejecuta tests automáticamente contra varias combinaciones de Laravel y PHP.Importancia de fail-fast: false
Con fail-fast: false, aunque una combinación falle, las demás siguen ejecutándose. Así puedes ver en una sola ejecución de CI qué combinaciones concretas fallan.
Actualización gradual de la matriz
Cuando sale una nueva versión de Laravel, añádela a la matriz. Cuando retires una versión antigua, elimínala.Ejemplo de composer.json
Ejemplo completo de uncomposer.json con soporte a varias versiones.
Checklist para adaptarte a nuevas versiones
Antes de la nueva release de Laravel
Antes de la nueva release de Laravel
- Verifica el comportamiento con la versión de desarrollo (
dev-master/@dev). - Revisa los cambios rompedores en la guía oficial de actualización.
- Implementa la adaptación a la nueva versión en un entorno de tests.
- Añade la nueva versión a la matriz de tests y verifícala en CI.
Reacción inmediata tras la release
Reacción inmediata tras la release
- Añade la nueva versión al requisito de
illuminate/*encomposer.json. - Ajusta el requisito de PHP si es necesario.
- Actualiza también
orchestra/testbenchenrequire-deva la versión compatible. - Publica la nueva versión con un tag para que aparezca en Packagist.
- Actualiza la tabla de compatibilidad del README.
Al retirar soporte a versiones antiguas
Al retirar soporte a versiones antiguas
- Declara el fin de soporte en CHANGELOG/README.
- Elimina las restricciones de la versión antigua del
composer.json. - Elimina la versión antigua de la matriz de tests.
- Limpia el código condicional específico para la versión antigua.
Páginas relacionadas
Fundamentos del desarrollo de paquetes
Cómo desarrollar paquetes Laravel centrados en los service providers.
Pruebas avanzadas con Pest
Cómo escribir pruebas para paquetes con la Expectation API y los datasets de Pest.