Flutter: Compartilhando dependências em um Flutter Monorepo
Acredito que muitos projetos monorepo do Dart e do Flutter já estejam usando o Melos. É uma ferramenta útil para o gerenciamento de vários pacotes, e fico feliz em vê-la sendo aprimorada continuamente.
Conteudo
Recurso de dependências compartilhadas
Neste artigo, estou ansioso para destacar o recurso Shared Dependencies que foi introduzido no Melos 3.2.0.
Essencialmente, se você quiser compartilhar uma versão de dependência entre os pacotes em seu monorepo, basta adicionar a dependência ao arquivo melos.yaml
, e o comando melos bootstrap
garantirá que seus arquivos pubscpec.yaml
sejam atualizados de acordo com a versão definida no arquivo melos.yaml
. Isso funciona não apenas para dependencies
ou dev_dependencies
, mas também para a configuração do ambiente.
Mais contexto sobre ele pode ser obtido em sua solicitação de recurso e no PR em que foi implementado.
Shared Dependencies na prática
Vamos ver como isso funciona na prática usando o projeto Flame como exemplo.
No momento em que escrevo, vários pacotes do monorepo Flame dependem do meta v1.9.1, e você pode ver a configuração de bootstrap copiada abaixo.
name: Flame repository: https://github.com/flame-engine/flame packages: - packages/** - examples/ - examples/games/** - doc/** command: bootstrap: environment: sdk: ">=3.0.0 <4.0.0" dependencies: meta: ^1.9.1 vector_math: ^2.1.4 dev_dependencies: dartdoc: ^6.3.0 mocktail: ^1.0.1 test: any scripts: # Omitted for brevity.
Depois de atualizar a versão do meta para meta: ^1.10.0
no melos.yaml
e executar o comando melos bs
, obtenho 49 pacotes inicializados, 9 deles que dependem do meta
receberam a mesma atualização imediatamente! Isso é muito útil e pode facilitar o gerenciamento de dependências no Dart/Flutter monorepos.
Conclusão
Embora seja verdade que o gerenciamento de pacotes no ecossistema Dart/Flutter seja menos maduro em comparação com outras plataformas como .NET, temos a sorte de ter ferramentas como o Melos à nossa disposição que podem simplificar o processo. Ao contribuir ativamente com essas ferramentas, podemos desempenhar um papel importante na melhoria da experiência do desenvolvedor e na promoção de maior satisfação dentro da comunidade.
Recursos
- https://melos.invertase.dev/commands/bootstrap#shared-dependencies
- https://pub.dev/packages/melos/changelog#320
- https://github.com/invertase/melos/issues/94
- https://github.com/invertase/melos/pull/526
- https://github.com/flame-engine/flame/blob/78380b9d3bb895e20f382c4a1227bcc11e5038b9/melos.yaml#L16C1-L25C16