Uma visão geral do ecossistema de pacotes Laravel

Especialmente para os alunos dos cursos "Backend-developer em PHP" e "Framework Laravel" preparamos outra tradução útil.












No mundo Laravel , os   pacotes desempenham um papel importante. Quão importante é essa função e quais pacotes existem? Para descobrir, pegamos dados da API  Packagist.org e filtramos os pacotes do Laravel.



Como definimos os pacotes do Laravel? Usando um arquivo  composer.json. Tratamos saco para Laravel ecossistema, se os campos name, description, keywords ou type conter uma seqüência laravel. Além disso, um pacote foi definido como um pacote Laravel se contiver laravel/framework ou qualquer componente de subárvore  illuminate/*como uma dependência. Finalmente, a chave  laravelno campo extra também era um indicador da associação do pacote no ecossistema do framework Laravel.



Embora esses critérios não garantam que o pacote seja exclusivamente Laravel, eles indicam que o pacote foi construído com o Laravel em mente.



Pacotes mais populares



Se você der uma simples olhada na  lista dos pacotes mais baixados , o resultado não agradará: estes são pacotes básicos e pacotes com um grande número de usos fora dos projetos do 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 |


Talvez uma classificação mais interessante possa ser obtida eliminando esses resultados de “falso positivo”. Nós filtramos manualmente os 30 pacotes mais populares que foram criados para projetos Laravel e são instalados propositalmente. Também destacamos as áreas de destino desses pacotes.



| | 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 |


Explicação das áreas de destino:



  • auth - autenticação e autorização
  • dev - ferramentas de desenvolvimento e depuração
  • helper - suporte e simplificação do trabalho
  • integ - integração com outros serviços
  • port - importar e / ou exportar em vários formatos


O primeiro lugar nesta lista é ocupado por ferramentas de desenvolvimento, seguido de integração.







Esperávamos ver mais pacotes Spatie no topo  , mas descobrimos que maatwebsite / excel e ferramentas de  Barry vd. Heuvels  são usados ​​com mais freqüência.



Visão geral do fornecedor



No total, identificamos 47.337 pacotes Laravel de 23.167 desenvolvedores diferentes. O resultado é uma distribuição bastante uniforme com muitos pequenos participantes.



Metade dos pacotes (23.668) foram criados por 3927 desenvolvedores principais. Isso é significativamente mais do que se a lei de Price estivesse em vigor aqui  . 15.042 desenvolvedores publicaram apenas um pacote cada.



Se você classificar os desenvolvedores pelo número de pacotes, poderá ver nomes quase desconhecidos. Aqui estão os desenvolvedores de pacotes de melhor desempenho com os downloads cumulativos de seus respectivos pacotes.



| | 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 |


Acontece que existem alguns desenvolvedores que criam um grande número de componentes e os implementam sem muita publicidade. Para ver mais nomes famosos e comparar seus números, vamos classificar a lista pelo número total de downloads.



| | 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 |


Se, em vez disso, você classificar a lista por downloads mensais, o resultado será um pouco 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 |


Essas distribuições claramente superam o topo. Quer estejamos olhando para downloads diários, mensais ou totais, mais da metade de todos os downloads vêm dos 6 principais desenvolvedores de pacotes. Por exemplo, 2,85 milhões de 5,65 milhões de downloads diários são compartilhados por  laravelilluminatenesbotspatiefideloper  e  barryvdh .



Você pode usar algo como  o Índice de Hirsch  para medir a popularidade do desenvolvedor. Existem apenas 317 desenvolvedores, cada um com pelo menos 317 downloads por dia. 1.118 fornecedores têm 1.118 ou mais downloads por mês, ou 3003 para o total de downloads.



Opções de licenciamento



Nossa visão geral do licenciamento não é particularmente precisa, pois diferentes strings são usadas para denotar a mesma licença. Por exemplo, gpl-3.0gpl 3.0gpl3, gplv3, mesmo gnu general public license version 3, e muitas outras opções de apontar para a mesma licença.



Felizmente, as principais conclusões são claras, já que a linha mitdenota a licença correspondente para 37.502 pacotes Laravel. 6304 pacotes não são licenciados, mais de 500 pacotes são distribuídos sob licenças Apache 2.0 e GPL 3.0. Existem também várias centenas de pacotes com licenças BSD 2, BSD 3 e GPL 2.0.



79% dos pacotes do Laravel são licenciados pelo MIT, 14% não são licenciados e cada uma das outras licenças é usada em 2% ou menos pacotes. Talvez isso seja em parte influência do próprio framework Laravel, que é distribuído sob a licença do MIT. Se você olhar para todos os pacotes, a popularidade da licença MIT é significativamente menor - 60%.











Além do Laravel



O número de pacotes para diferentes estruturas demonstra o envolvimento da comunidade no desenvolvimento das ferramentas da estrutura e o grau em que está disposta a compartilhar seu código com outros contribuidores. Também contamos o número de pacotes descartados e sua porcentagem para ver quais comunidades estão prosperando e quais estão ficando para trá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 outro lado, o número total de downloads reflete a importância dos pacotes para o desenvolvimento de projetos padrão.



Observe que ao calcular este número de downloads, todos os pacotes associados ao framework são levados em consideração, não apenas os básicos (como no cálculo do número de pacotes acima). Veja aqui os critérios para classificar um pacote como pertencente a uma estrutura específica  . Um pacote pode pertencer a ecossistemas de várias estruturas.



| | 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 |






Deve-se notar que a posição de liderança do Symfony não significa que a maioria dos pacotes são baixados para uso em projetos baseados neste framework. Alguns dos principais pacotes Symfony são usados ​​pelo Laravel, e muitos outros pacotes Symfony também podem ser usados ​​em projetos Laravel.



Além disso, notavelmente, os pacotes Zend têm quase tantos downloads por mês quanto o Laravel, embora este projeto não seja mais suportado.



Finalmente, dê uma olhada na lista geral dos pacotes PHP mais baixados.



| | 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 |


Os dados apresentados neste artigo foram coletados principalmente por Gatis Šūpulnieks em abril e maio de 2020 como parte da pesquisa “Desenvolvendo e usando pacotes Laravel”.



Fontes relevantes:









:






All Articles