Descripción general del ecosistema del paquete Laravel

Especialmente para los alumnos de los cursos "Desarrollador backend en PHP" y "Framework Laravel" hemos preparado otra traducción útil.












En el mundo de Laravel , los   paquetes juegan un papel importante. ¿Qué importancia tiene este rol y qué paquetes hay? Para averiguarlo, tomamos datos de la API de  Packagist.org y filtramos los paquetes de Laravel.



¿Cómo definimos los paquetes de Laravel? Usando un archivo  composer.json. Tratamos a la bolsa para el ecosistema laravel, si los campos name, description, keywords o type contienen una cadena laravel. Además, un paquete se definió como un paquete de Laravel si contenía laravel/framework o cualquier componente de subárbol  illuminate/*como una dependencia. Finalmente, la clave  laravelen el campo extra también fue un indicador de la pertenencia del paquete al ecosistema del marco de Laravel.



Si bien estos criterios no garantizan que el paquete sea exclusivamente de Laravel, sí indica que el paquete se creó con Laravel en mente.



Paquetes más populares



Si echa un vistazo a la  lista de los paquetes más descargados , los resultados no serán del agrado: estos son paquetes base y paquetes con una gran cantidad de usos fuera de los proyectos de Laravel.



| Package | Monthly downloads | |-------------------------|-------------------| | nesbot/carbon | 4084214 | | laravel/framework | 2987907 | | laravel/tinker | 2455355 | | fideloper/proxy | 2376631 | | nunomaduro/collision | 1510258 | | intervention/image | 1099989 | | facade/ignition | 966800 | | facade/flare-client-php | 934651 | | composer/installers | 803222 | | illuminate/support | 756189 |


Quizás se pueda obtener una calificación más interesante eliminando estos resultados de “falso positivo”. Hemos filtrado manualmente los 30 paquetes más populares que se crearon para proyectos de Laravel y se instalaron a propósito. También describimos las áreas de destino de estos paquetes.



| | Package | Monthly | Total | Purpose | |----|------------------------------------|---------|----------|---------| | 1 | maatwebsite/excel | 680466 | 17769696 | port | | 2 | laravelcollective/html | 678048 | 21785383 | helper | | 3 | barryvdh/laravel-ide-helper | 644297 | 18918427 | dev | | 4 | barryvdh/laravel-debugbar | 625080 | 19404288 | dev | | 5 | laravel/passport | 552633 | 10099903 | auth | | 6 | beyondcode/laravel-dump-server | 530901 | 11035024 | dev | | 7 | sentry/sentry-laravel | 455879 | 8440070 | integ | | 8 | laravel/ui | 433850 | 1599042 | auth | | 9 | barryvdh/laravel-cors | 400920 | 10823255 | helper | | 10 | laravel/socialite | 394471 | 10166784 | auth | | 11 | laravel/slack-notification-channel | 385921 | 7172937 | integ | | 12 | tymon/jwt-auth | 359693 | 9107092 | auth | | 13 | barryvdh/laravel-dompdf | 349572 | 8006731 | port | | 14 | laravel/helpers | 337956 | 1692185 | helper | | 15 | spatie/laravel-permission | 308453 | 5224001 | auth | | 16 | laravel/horizon | 304864 | 4599598 | integ | | 17 | laravel/dusk | 256261 | 4542482 | dev | | 18 | laravel/nexmo-notification-channel | 238192 | 6080124 | integ | | 19 | laravel/telescope | 227966 | 2289576 | dev | | 20 | bugsnag/bugsnag-laravel | 223167 | 6544766 | dev | | 21 | yajra/laravel-datatables-oracle | 212985 | 5644721 | integ | | 22 | aws/aws-sdk-php-laravel | 212260 | 7070121 | integ | | 23 | orchestra/testbench-core | 199780 | 1864659 | dev | | 24 | orchestra/testbench | 195269 | 2279889 | dev | | 25 | symplify/package-builder | 193661 | 1484783 | dev | | 26 | laravel/scout | 177270 | 3391042 | integ | | 27 | barryvdh/laravel-snappy | 156741 | 3651684 | port | | 28 | webpatser/laravel-uuid | 153883 | 4774711 | helper | | 29 | spatie/laravel-medialibrary | 149290 | 2293823 | helper | | 30 | spatie/laravel-activitylog | 148932 | 2387978 | dev |


Explicación de las áreas de destino:



  • auth - autenticacion y autorizacion
  • dev - herramientas de desarrollo y depuración
  • helper - apoyo y simplificación del trabajo
  • integ - integración con otros servicios
  • port - importar y / o exportar en varios formatos


El primer lugar de esta lista lo ocupan las herramientas de desarrollo, seguido de la integración.







Esperábamos ver más paquetes de Spatie en la parte superior  , pero resultó que maatwebsite / excel y las herramientas de  Barry vd. Los heuvels  se utilizan con más frecuencia.



Resumen de proveedores



En total, identificamos 47,337 paquetes de Laravel de 23,167 desarrolladores diferentes. El resultado es una distribución bastante uniforme con muchos participantes pequeños.



La mitad de los paquetes (23,668) fueron creados por 3927 desarrolladores centrales. Esto es significativamente más que si la ley de Price hubiera estado en vigor aquí  . 15.042 desarrolladores han publicado solo un paquete cada uno.



Si ordena a los desarrolladores por la cantidad de paquetes, puede ver nombres casi desconocidos. Estos son los creadores de paquetes con mejor rendimiento con las descargas acumuladas de sus respectivos paquetes.



| | Developer | Count | Daily | Monthly | Total | |----|-------------------------------|-------|-------|---------|----------| | 1 | socialiteproviders | 159 | 10645 | 256409 | 5826725 | | 2 | bantenprov | 132 | 0 | 5 | 3160 | | 3 | spatie | 124 | 89124 | 2746665 | 43095685 | | 4 | railken | 119 | 0 | 11082 | 313129 | | 5 | laravel-enso | 95 | 1519 | 29456 | 879635 | | 6 | amethyst | 92 | 1232 | 8118 | 100819 | | 7 | faustbrian | 85 | 152 | 2639 | 52698 | | 8 | artisanry | 78 | 129 | 1190 | 11938 | | 9 | sukohi | 75 | 58 | 1773 | 53805 | | 10 | anomaly | 59 | 198 | 6095 | 974489 | | 11 | sanatorium | 59 | 0 | 0 | 20 | | 12 | laravel-notification-channels | 54 | 3107 | 99536 | 1621420 | | 13 | hnhdigital-os | 54 | 38 | 1571 | 20304 | | 14 | arcanedev | 53 | 3875 | 127702 | 3293360 | | 15 | inetstudio | 53 | 241 | 3870 | 77009 | | 16 | larakit | 49 | 1 | 410 | 18540 | | 17 | orchestra | 48 | 21569 | 544696 | 7606461 | | 18 | abuseio | 45 | 1 | 951 | 78289 | | 19 | genealabs | 43 | 3219 | 87234 | 1215349 | | 20 | smorken | 41 | 36 | 985 | 14277 |


Resulta que hay bastantes desarrolladores que crean una gran cantidad de componentes y los implementan sin mucha publicidad. Para ver más nombres famosos y comparar sus números, ordenemos la lista por el número total de descargas.



| | Developer | Count | Daily | Monthly | Total | |----|-------------------|-------|--------|---------|-----------| | 1 | laravel | 39 | 364375 | 9832728 | 225867755 | | 2 | illuminate | 33 | 244509 | 7210832 | 197044965 | | 3 | nesbot | 1 | 179106 | 4084214 | 112631927 | | 4 | barryvdh | 19 | 82289 | 2246578 | 63115434 | | 5 | spatie | 124 | 89124 | 2746665 | 43095685 | | 6 | fideloper | 3 | 100748 | 2376631 | 41313378 | | 7 | intervention | 7 | 46259 | 1260102 | 33891504 | | 8 | composer | 1 | 10603 | 803222 | 26065561 | | 9 | league | 7 | 18996 | 731742 | 24433630 | | 10 | nunomaduro | 19 | 68333 | 1734552 | 23394056 | | 11 | laravelcollective | 6 | 32460 | 710099 | 23285426 | | 12 | maatwebsite | 6 | 27955 | 717140 | 18258360 | | 13 | cocur | 1 | 19246 | 491761 | 16609476 | | 14 | jenssegers | 15 | 24263 | 544700 | 16468485 | | 15 | beyondcode | 29 | 14221 | 677724 | 12648233 | | 16 | laracasts | 11 | 10352 | 317232 | 12119703 | | 17 | graham-campbell | 36 | 11092 | 291114 | 10184667 | | 18 | facade | 5 | 67794 | 1915933 | 9860242 | | 19 | yajra | 19 | 17794 | 446360 | 9792222 | | 20 | tymon | 2 | 11437 | 359693 | 9107116 |


Si, en cambio, ordena la lista por descargas mensuales, el resultado será ligeramente diferente.



| | Developer | Count | Daily | Monthly | Total | |----|-------------------|-------|--------|---------|-----------| | 1 | laravel | 39 | 364375 | 9832728 | 225867755 | | 2 | illuminate | 33 | 244509 | 7210832 | 197044965 | | 3 | nesbot | 1 | 179106 | 4084214 | 112631927 | | 4 | spatie | 124 | 89124 | 2746665 | 43095685 | | 5 | fideloper | 3 | 100748 | 2376631 | 41313378 | | 6 | barryvdh | 19 | 82289 | 2246578 | 63115434 | | 7 | facade | 5 | 67794 | 1915933 | 9860242 | | 8 | nunomaduro | 19 | 68333 | 1734552 | 23394056 | | 9 | intervention | 7 | 46259 | 1260102 | 33891504 | | 10 | composer | 1 | 10603 | 803222 | 26065561 |


Estas distribuciones claramente superan la parte superior. Ya sea que estemos viendo descargas diarias, mensuales o totales, más de la mitad de todas las descargas provienen de los 6 principales desarrolladores de paquetes. Por ejemplo, 2,85 millones de 5,65 millones de descargas diarias son compartidas por  laravelilluminatenesbotSpatiefideloper  y  barryvdh .



Puede usar algo como  el índice Hirsch  para medir la popularidad de los desarrolladores. Solo hay 317 desarrolladores, cada uno con al menos 317 descargas por día. 1,118 proveedores tienen 1,118 o más descargas por mes, o 3003 para descargas totales.



Opciones de licencia



Nuestra descripción general de licencias no es particularmente precisa ya que se utilizan diferentes cadenas para denotar la misma licencia. Por ejemplo, gpl-3.0gpl 3.0gpl3, gplv3, incluso gnu general public license version 3, y muchas otras opciones apuntan a la misma licencia.



Afortunadamente, las principales conclusiones son claras, ya que la línea mitdenota la licencia correspondiente para 37,502 paquetes de Laravel. 6304 paquetes no tienen licencia, más de 500 paquetes se distribuyen bajo licencias Apache 2.0 y GPL 3.0. También hay varios cientos de paquetes con licencias BSD 2, BSD 3 y GPL 2.0.



El 79% de los paquetes de Laravel tienen licencia del MIT, el 14% no tienen licencia y cada una de las otras licencias se usa en un 2% o menos de paquetes. Quizás esto sea en parte la influencia del propio framework Laravel, que se distribuye bajo la licencia MIT. Si observa todos los paquetes, la popularidad de la licencia MIT es significativamente menor: 60%.











Más allá de Laravel



El número de paquetes para diferentes marcos demuestra la participación de la comunidad en el desarrollo de las herramientas del marco y el grado en que está dispuesta a compartir su código con otros contribuyentes. También contamos la cantidad de paquetes caídos y su porcentaje para ver qué comunidades prosperan y cuáles se quedan atrás.



| | Framework | Packages | Abandoned | Aband. % | |----|---------------|----------|-----------|----------| | 1 | Laravel | 47337 | 2618 | 5,5% | | 2 | Symfony | 39428 | 3362 | 8,5% | | 3 | Yii | 15354 | 552 | 3,6% | | 4 | ZendFramework | 7459 | 790 | 10,6% | | 5 | WordPress | 6446 | 480 | 7,4% | | 6 | Nette | 3460 | 342 | 9,9% | | 7 | CakePHP | 2607 | 173 | 6,6% | | 8 | Slim | 1411 | 64 | 4,5% | | 9 | Laminas | 811 | 17 | 2,0% | | 10 | Phalcon | 726 | 40 | 5,5% | | 11 | Codeigniter | 663 | 91 | 13,7% | | 12 | Aura | 450 | 32 | 7,1% | | 13 | Kohana | 341 | 43 | 12,6% | | 14 | FuelPHP | 148 | 12 | 8,1% | | 15 | PHPixie | 73 | 1 | 1,4% |






Por otro lado, el número total de descargas refleja la importancia de los paquetes para desarrollar proyectos estándar.



Tenga en cuenta que al calcular este número de descargas, se tienen en cuenta todos los paquetes asociados con el marco, no solo los básicos (como con el cálculo del número de paquetes anterior). Para conocer los criterios para clasificar un paquete como perteneciente a un marco específico, consulte  aquí . Un paquete puede pertenecer a ecosistemas de varios marcos.



| | Framework | Monthly | Total | |----|---------------|-----------|------------| | 1 | Symfony | 366029776 | 8945189030 | | 2 | Laravel | 56523199 | 1315681505 | | 3 | ZendFramework | 50789083 | 1460984224 | | 4 | Nette | 14137793 | 295710951 | | 5 | Laminas | 9540512 | 134960483 | | 6 | Yii | 5662063 | 200378585 | | 7 | CakePHP | 4067892 | 112091915 | | 8 | WordPress | 3871828 | 96962490 | | 9 | Slim | 2123558 | 46196613 | | 10 | FuelPHP | 930846 | 32043126 | | 11 | Codeigniter | 919926 | 30474042 | | 12 | Kohana | 912106 | 31918403 | | 13 | Aura | 467771 | 18063339 | | 14 | Phalcon | 137762 | 4322810 | | 15 | PHPixie | 5353 | 572100 |






Cabe señalar que la posición de liderazgo de Symfony no significa que la mayoría de los paquetes se descarguen para su uso en proyectos basados ​​en este marco. Laravel usa varios de los paquetes principales de Symfony, y muchos otros paquetes de Symfony también se pueden usar en proyectos de Laravel.



Además, en particular, los paquetes de Zend tienen casi tantas descargas por mes como Laravel, aunque este proyecto ya no es compatible.



Finalmente, eche un vistazo a la lista general de los paquetes PHP más descargados.



| | Package | Monthly | Total | |----|-----------------------------------|---------|-----------| | 1 | symfony/polyfill-mbstring | 7943600 | 210645235 | | 2 | psr/log | 7768451 | 238663129 | | 3 | symfony/polyfill-ctype | 7284741 | 110601284 | | 4 | psr/container | 6847606 | 119345271 | | 5 | symfony/console | 6713344 | 199367074 | | 6 | guzzlehttp/guzzle | 6607580 | 168514253 | | 7 | symfony/finder | 6486878 | 176261290 | | 8 | psr/http-message | 6384401 | 164860087 | | 9 | guzzlehttp/promises | 6372505 | 149984782 | | 10 | guzzlehttp/psr7 | 6350221 | 161806561 | | 11 | doctrine/instantiator | 6199120 | 180684872 | | 12 | symfony/process | 6167368 | 169254030 | | 13 | phpdocumentor/reflection-docblock | 6140913 | 165150240 | | 14 | monolog/monolog | 6109702 | 196673732 | | 15 | symfony/event-dispatcher | 6098870 | 190433052 | | 16 | webmozart/assert | 5905460 | 144395517 | | 17 | doctrine/lexer | 5895066 | 157678399 | | 18 | ralouphie/getallheaders | 5861396 | 66293788 | | 19 | doctrine/inflector | 5743593 | 171588858 | | 20 | phpdocumentor/type-resolver | 5706391 | 136101740 |


Los datos presentados en este artículo fueron recopilados principalmente por Gatis Šūpulnieks en abril y mayo de 2020 como parte de la investigación "Desarrollo y uso de paquetes Laravel".



Fuentes relevantes:









:






All Articles