Notícias dos desenvolvedores: atualizações do Django, Storybook 7.6 e Node.js 20 Beta
25 de janeiro de 2024A mentalidade de segurança em primeiro lugar para desbloquear a oportunidade da AWS
25 de janeiro de 2024Embora os monorepos ainda sejam principalmente o domínio dos primeiros usuários, há um interesse crescente no uso de monorepos em vez de polyrepo.
Ficamos nos perguntando como o monorepos poderia beneficiar os desenvolvedores front-end depois que Vercel adicionou suporte, então conversamos com Victor Savkin, cofundador e CTO da Nrwl, que fabrica uma ferramenta monorepo/CI chamada Nx. Nrwl também é o mantenedor da ferramenta monorepo de código aberto Lerna.
Definindo Monorepo
Primeiro, é importante entender o que é um monorepo. Sim, é um repositório único para um projeto ou aplicativo da web, mas isso não significa que os monorepos sejam um monólito que simplesmente contém todo o código. Monorepos são uma forma de trazer ordem ao que de outra forma poderia ser uma “melluva hess”, como dizia meu professor de governo. Ferramentas Monorepo como NX, Lerna e TurboRepo ajudam a estabelecer a ordem no repo, disse Savkin.
“É uma solução técnica para um problema humano, que reduz o custo da colaboração”, disse Savkin. “É por isso que o monorepo é muito mais semelhante em termos de impacto a algo como o GitHub do que a algo como um bundler, porque um bundler é um problema técnico. Com um monorepo, é preciso fazer as coisas rapidamente e tudo mais, mas o impacto é maior… agora as equipes podem trabalhar juntas com muito mais rapidez, os funcionários podem entregar as coisas com muito mais rapidez.”
É por isso que a adesão da equipe é tão importante, acrescentou.
“O custo da colaboração basicamente diminui muito em um monorepo”, disse ele. “Essa é a principal vantagem: basicamente você deseja reduzir o custo de colaboração para algo menor.”
Na verdade, a colaboração é tão importante que, se uma organização tem duas equipes de desenvolvimento separadas – talvez por causa de uma aquisição – que raramente interagem, provavelmente é melhor mantê-las separadas, em vez de mudar para um monorepo, acrescentou.
O que ‘impulsiona’ os monorepos
Savkin comparou o desenvolvimento do monolito a uma estrada sem semáforos ou leis – as pessoas andam loucamente na estrada, disse ele, mas talvez não seja um problema, desde que apenas algumas pessoas usem a estrada. Mas quando a estrada começa a ter tráfego de 100 pessoas, isso leva a acidentes. Para resolver o problema, múltiplas estradas — polyrepos — são criadas para garantir que o tráfego possa fluir sem esbarrar uns nos outros.
“Temos várias estradas. Tenho a minha própria estrada privada e (na) minha própria estrada privada, conduzo de uma maneira particular e não quero que ninguém me diga como conduzo”, disse ele, mas acrescentando que “é difícil integrar (isso estrada privada) em um sistema maior.”
Os Monorepos oferecem uma alternativa onde existem leis de trânsito e sinais de parada, o que facilita a integração e o dimensionamento.
“Um repo não é apenas uma unidade, mas várias unidades com relações explícitas entre unidades”, explicou Savkin.
Benefícios de front-end
Monorepos não servem apenas para aplicativos corporativos e grandes empresas como o Google, disse Savkin. No entanto, tal como está agora, os polyrepos tendem a ser a abordagem mais comum, com cada linha de negócio ou funcionalidade tendo o seu próprio repo. Tomemos, por exemplo, um banco. Seu site ou aplicativo pode ter uma seção de cartão de crédito e uma seção de empréstimo de automóveis. Mas e se for necessário haver uma mensagem, função comum ou mesmo apenas uma mudança de design comum entre as divisões? Polyrepo torna isso mais difícil, disse ele.
“Agora preciso fazer uma coordenação com a equipe A, equipe B”, disse Savkin. “Em um caso polyrepo, pode levar muitos meses.”
Em um monorepo, é fácil fazer essa alteração em apenas um dia, acrescentou. Também permite o compartilhamento de componentes e bibliotecas entre equipes de desenvolvimento.
A Monorepos ajudou a Jotfrom, uma empresa de formulários online com sede em São Francisco, a reduzir sua dívida técnica no frontend, de acordo com o arquiteto e diretor de engenharia de frontend Berkay Aydin. Aydin escreveu na semana passada sobre a mudança da empresa para um monorepo para o frontend.
“Não temos mais configurações múltiplas ou processos de construção”, escreveu Aydin. “Agora temos certeza de que todos os aplicativos usam as mesmas configurações. Por exemplo, se atualizarmos o suporte ao navegador, saberemos que todas as partes da empresa terão o mesmo suporte ao navegador.”
Ele acrescentou que é fácil compartilhar código em segundos usando o pnpm
recurso de espaços de trabalho e alguns padrões internos. Outros benefícios listados por Aydin foram:
- Um ambiente de desenvolvimento comum, que facilita a criação de comandos comuns;
- Melhor integração para novos funcionários;
- Refração mais fácil;
- Tempos totais de construção reduzidos; e
- Consciência de dependência, porque os desenvolvedores podem ver como os aplicativos e bibliotecas estão conectados entre si.
As desvantagens
Aydin também compartilhou as desvantagens dos monorepos e como sua equipe as abordou. As desvantagens que ele cita são:
- É difícil migrar repositórios existentes para monorepos;
- Fazer mudanças críticas significa trabalhar nos finais de semana ou fora dos horários se o repositório de origem estiver ativamente em desenvolvimento;
- Gerenciando a fila de construção;
- Cache difícil de depurar; e, previsivelmente,
- Menos liberdade para desenvolvedores. É mais fácil experimentar novas tecnologias em um único repositório, escreveu ele.
Savkin reconheceu que pode ser difícil migrar para um monorepo, mas não é um problema técnico; é organizacional.
“A parte mais difícil é dizer: ‘Bem, agora posso retrabalhar o aplicativo para aproveitar as vantagens da ferramenta monorepo’ – por exemplo, dividi-lo mais, introduzir mais particionamento (ou) compartilhar mais código”, disse ele. “Isso é mais difícil porque requer pensamento arquitetônico. Apenas dizendo mecanicamente, tenho dois aplicativos, quero colocá-los no mesmo monorepo e compartilhar um componente – isso é trivial; que você pode fazer em um dia.”
A postagem O caso a favor (e contra) Monorepos no frontend apareceu pela primeira vez em The New Stack.