Gerenciar projetos JavaScript ou TypeScript em grande escala envolvendo vários pacotes interdependentes pode ser um desafio significativo para desenvolvedores e equipes de desenvolvimento. Freqüentemente, os desenvolvedores dependem de vários repositórios para cada pacote, o que resulta em sobrecarga em termos de manutenção de código, gerenciamento de dependências e colaboração.
Lerna, uma poderosa ferramenta desenvolvida para gerenciar monorepos, agiliza esse processo. Monorepos permite que as equipes hospedem vários pacotes em um único repositório, simplificando o gerenciamento de dependências e tornando a colaboração entre equipes mais fácil.
Este e-book tem como objetivo fornecer um guia completo sobre como usar Lerna para gerenciar seus monorepos com eficiência. Esteja você lidando com uma biblioteca de componentes ou um projeto de grande escala com vários pacotes interconectados, você encontrará informações valiosas para ajudá-lo a maximizar sua produtividade com Lerna.
Lerna é uma ferramenta de código aberto que facilita o gerenciamento de vários pacotes em um monorepo. Ele oferece recursos poderosos, como gerenciamento automático de dependências, controle de versão e publicação, facilitando a manutenção de projetos JavaScript e TypeScript em escala.
Monorepos são uma escolha arquitetônica para muitos projetos de grande escala, pois oferecem vários benefícios:
Apesar desses benefícios, o gerenciamento de um monorepo pode trazer desafios únicos, principalmente no gerenciamento de dependências e controle de versão. Lerna foi projetado para enfrentar esses desafios de frente, fornecendo um fluxo de trabalho otimizado para monorepos.
Antes de começar, certifique-se de ter Node.js e npm (ou Yarn) instalados. Lerna é compatível com npm e Yarn.
Você pode instalar Lerna globalmente via npm:
npm install --global lerna
Alternativamente, você pode adicionar Lerna como uma dependência de desenvolvimento em seu projeto:
npm install --save-dev lerna
Depois de instalado, inicialize seu monorepo navegando até o diretório do projeto e executando:
lerna init
Isso criará os arquivos de configuração essenciais, incluindo lerna.json, e configurará uma pasta de pacotes onde seus pacotes individuais residirão.
Em um projeto Lerna, cada pacote reside em sua própria subpasta em pacotes. Cada pacote deve ter seu próprio arquivo package.json para gerenciamento de dependências.
Estrutura de amostra:
/my-project /packages /package-a /package-b lerna.json package.json
Gerenciar dependências em vários pacotes é um dos principais pontos fortes de Lerna.
Lerna permite adicionar dependências a um pacote específico. Por exemplo, se apenas o pacote-a precisar de lodash, você pode executar:
lerna add lodash --scope=package-a
Quando vários pacotes compartilham dependências, você pode içar essas dependências para a raiz do seu monorepo. Isso reduz a redundância e acelera as instalações. Para ativar o içamento, adicione isto a lerna.json:
{ "hoist": true }
Para instalar dependências e vincular pacotes que dependem uns dos outros, execute:
lerna bootstrap
Isso garante que todas as dependências externas necessárias sejam instaladas e que os pacotes possam fazer referência uns aos outros corretamente.
Lerna facilita a execução de scripts (por exemplo, build, test, lint) em todos os pacotes em seu monorepo.
Para executar um script como build em todos os pacotes, use:
lerna run build
Se você deseja executar um script apenas em determinados pacotes, use o sinalizador --scope:
lerna run test --scope=package-a
Essa flexibilidade permite uma execução mais direcionada, economizando tempo durante o desenvolvimento.
Lerna fornece recursos robustos de versionamento e publicação, permitindo que você versione e libere pacotes facilmente.
No modo fixo, todos os pacotes compartilham o mesmo número de versão. Quando qualquer pacote é atualizado, o número da versão é incrementado para todos.
No modo independente, cada pacote possui seu próprio número de versão. Quando um pacote é alterado, apenas a versão desse pacote é atualizada.
Para mudar para o modo independente, modifique lerna.json:
{ "version": "independent" }
Para publicar seus pacotes no npm, execute:
lerna publish
Lerna cuidará do versionamento e da publicação com base na sua configuração.
Combinar Lerna com Yarn Workspaces pode otimizar ainda mais o gerenciamento de dependências, elevando ainda mais dependências compartilhadas.
Para ativar o Yarn Workspaces, modifique seu arquivo lerna.json:
{ "npmClient": "yarn", "useWorkspaces": true }
Em seguida, atualize seu package.json:
{ "workspaces": ["packages/*"] }
Essa integração aumenta o desempenho e simplifica o gerenciamento de projetos de grande escala.
Lerna permite a filtragem para executar comandos para pacotes específicos ou para excluir determinados pacotes.
Exemplo de execução em pacotes específicos:
lerna run build --scope=package-a --scope=package-b
Exemplo para exclusão de pacotes:
lerna run build --ignore=package-c
Você pode definir comandos Lerna personalizados em package.json para fluxos de trabalho especializados. Esses comandos podem então ser executados em seus pacotes.
Lerna é uma ferramenta inestimável para gerenciamento de monorepos, oferecendo recursos que simplificam fluxos de trabalho complexos, desde gerenciamento de dependências até controle de versão e publicação. Ao adotar o Lerna, as equipes podem reduzir a complexidade, agilizar processos e melhorar a colaboração, facilitando a manutenção de projetos de grande escala.
Esteja você trabalhando em uma biblioteca de componentes simples ou em um ecossistema de vários pacotes, Lerna fornece as ferramentas necessárias para gerenciar seu projeto de forma eficaz. Continue experimentando os recursos avançados do Lerna para desbloquear todo o seu potencial.
Boa codificação :)
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3