9 min leitura • Guide 760 of 877
Melhores Práticas de Gerenciamento de Dependências
Dependências são tanto ativos quanto passivos. GitScrum ajuda equipes a rastrear trabalho de dependências e manter ecossistemas de pacotes saudáveis.
Estratégia de Dependências
Filosofia de Atualização
ABORDAGEM DE ATUALIZAÇÃO DE DEPENDÊNCIAS:
┌─────────────────────────────────────────────────────────────┐
│ │
│ TIPOS DE ATUALIZAÇÃO: │
│ │
│ PATCHES DE SEGURANÇA: │
│ Prioridade: Imediata │
│ Exemplo: lodash 4.17.20 → 4.17.21 (correção CVE) │
│ Cronograma: Mesmo dia ou próximo dia útil │
│ Processo: Aceleração rápida, teste mínimo │
│ │
│ ATUALIZAÇÕES MENORES/PATCH: │
│ Prioridade: Manutenção regular │
│ Exemplo: react 18.2.0 → 18.2.1 │
│ Cronograma: Lote semanal ou quinzenal │
│ Processo: Teste normal, atualizações agrupadas │
│ │
│ ATUALIZAÇÕES PRINCIPAIS: │
│ Prioridade: Planejada │
│ Exemplo: react 17 → 18 │
│ Cronograma: Sprint dedicado ou épico │
│ Processo: Teste completo, revisão do guia de migração │
│ │
│ ─────────────────────────────────────────────────────────── │
│ │
│ ANTI-PADRÕES: │
│ │
│ ❌ "Atualizar tudo" aleatoriamente │
│ ❌ Nunca atualizar (congelamento de versão) │
│ ❌ Atualizações principais sem planejamento │
│ ❌ Ignorar alertas de segurança │
│ │
│ ✅ Atualizações regulares, pequenas, testadas │
│ ✅ Priorizar segurança │
│ ✅ Planejar migrações principais │
│ ✅ Automatizar onde possível │
└─────────────────────────────────────────────────────────────┘
Atualizações de Segurança
Gerenciamento de Vulnerabilidades
WORKFLOW DE VULNERABILIDADE DE SEGURANÇA:
┌─────────────────────────────────────────────────────────────┐
│ │
│ VULNERABILIDADE DETECTADA: │
│ │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ 🔴 ALTA: lodash < 4.17.21 ││
│ │ CVE-2021-23337 ││
│ │ Vulnerabilidade de poluição de protótipo ││
│ │ Correção: Atualizar para 4.17.21+ ││
│ │ Afetado: package-lock.json ││
│ └─────────────────────────────────────────────────────────┘│
│ │
│ RESPOSTA DE SEVERIDADE: │
│ │
│ CRÍTICA/ALTA: │
│ • Avaliar: É explorável em nosso uso? │
│ • Se sim: Corrigir imediatamente (mesmo dia) │
│ • Se não: Corrigir dentro de 1 semana │
│ • Criar tarefa urgente no GitScrum │
│ │
│ MÉDIA: │
│ • Corrigir dentro do sprint ou próximo sprint │
│ • Incluir na manutenção regular │
│ │
│ BAIXA: │
│ • Incluir no próximo lote de dependências │
│ • Não ignorar, mas prioridade menor │
│ │
│ ─────────────────────────────────────────────────────────── │
│ │
│ TAREFA DE SEGURANÇA GITSCRUM: │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ 🔴 SEC-123: Atualizar lodash (CVE-2021-23337) ││
│ │ ││
│ │ Prioridade: Crítica ││
│ │ Rótulos: segurança, dependência ││
│ │ Vencimento: Hoje ││
│ │ ││
│ │ CVE: CVE-2021-23337 ││
│ │ Severidade: Alta ││
│ │ Atual: 4.17.20 ││
│ │ Alvo: 4.17.21 ││
│ │ Risco: Poluição de protótipo ││
│ │ ││
│ │ ☐ Atualizar dependência ││
│ │ ☐ Executar testes ││
│ │ ☐ Implantar ││
│ └─────────────────────────────────────────────────────────┘│
└─────────────────────────────────────────────────────────────┘
Manutenção Regular
Processo de Revisão de Dependências
REVISÃO MENSAL DE DEPENDÊNCIAS:
┌─────────────────────────────────────────────────────────────┐
│ │
│ TAREFA DE REVISÃO DE DEPENDÊNCIAS (Mensal): │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ MAINT-Q1-02: Revisão de Dependências de Fevereiro ││
│ │ ││
│ │ Checklist: ││
│ │ ☐ Executar npm audit / yarn audit ││
│ │ ☐ Revisar alertas GitHub Dependabot ││
│ │ ☐ Verificar atualizações menores disponíveis ││
│ │ ☐ Revisar pacotes descontinuados ││
│ │ ☐ Atualizar lote de pacotes de baixo risco ││
│ │ ☐ Documentar atualizações adiadas ││
│ └─────────────────────────────────────────────────────────┘│
│ │
│ CHECKLIST DE REVISÃO: │
│ │
│ 1. SEGURANÇA │
│ npm audit / snyk test │
│ Corrigir todas críticas/altas │
│ Planejar médias/baixas │
│ │
│ 2. PACOTES DESATUALIZADOS │
│ npm outdated │
│ Identificar pacotes > 2 versões principais atrás │
│ Planejar atualizações para pacotes críticos │
│ │
│ 3. PACOTES DESCONTINUADOS │
│ Verificar avisos de descontinuação │
│ Encontrar substitutos para descontinuados │
│ │
│ 4. PACOTES NÃO UTILIZADOS │
│ Verificar instalados mas não utilizados │
│ Remover para reduzir superfície de ataque │
│ │
│ 5. AUDITORIA DE LICENÇA │
│ Verificar licenças são compatíveis │
│ Sinalizar qualquer GPL em código proprietário │
└─────────────────────────────────────────────────────────────┘
Atualizações Automatizadas
CONFIGURAÇÃO DE AUTOMAÇÃO:
┌─────────────────────────────────────────────────────────────┐
│ │
│ DEPENDABOT / RENOVATE: │
│ │
│ Configuração: │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ # renovate.json ││
│ │ { ││
│ │ "extends": ["config:base"], ││
│ │ "schedule": ["on monday"], ││
│ │ "packageRules": [ ││
│ │ { ││
│ │ "matchUpdateTypes": ["patch", "minor"], ││
│ │ "groupName": "minor-updates", ││
│ │ "automerge": true ││
│ │ }, ││
│ │ { ││
│ │ "matchUpdateTypes": ["major"], ││
│ │ "labels": ["major-update"], ││
│ │ "automerge": false ││
│ │ } ││
│ │ ] ││
│ │ } ││
│ └─────────────────────────────────────────────────────────┘│
│ │
│ ESTRATÉGIA: │
│ │
│ ATUALIZAÇÕES DE PATCH: │
│ Auto-mesclar se testes passarem │
│ │
│ ATUALIZAÇÕES MENORES: │
│ Agrupar em PR semanal │
│ Revisar + mesclar após testes │
│ │
│ ATUALIZAÇÕES PRINCIPAIS: │
│ PR individual │
│ Requer revisão manual │
│ Criar tarefa GitScrum │
│ │
│ ATUALIZAÇÕES DE SEGURANÇA: │
│ PR imediato independente do tipo │
│ Revisão de alta prioridade │
└─────────────────────────────────────────────────────────────┘
Atualizações de Versão Principal
Planejamento de Atualizações Principais
PLANEJAMENTO DE ATUALIZAÇÃO PRINCIPAL:
┌─────────────────────────────────────────────────────────────┐
│ │
│ EXEMPLO: React 17 → React 18 │
│ │
│ FASE DE AVALIAÇÃO: │
│ │
│ 1. Ler guia de migração │
│ 2. Identificar mudanças de quebra que nos afetam │
│ 3. Verificar compatibilidade de dependências │
│ 4. Estimar esforço │
│ 5. Identificar riscos │
│ │
│ ÉPICO GITSCRUM: │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ UPGRADE-001: Migração React 18 ││
│ │ ││
│ │ Resumo: ││
│ │ Atualizar de React 17 para React 18 ││
│ │ ││
│ │ Escopo: ││
│ │ • 45 componentes afetados ││
│ │ • 3 dependências incompatíveis ││
│ │ • Novos recursos para aproveitar ││
│ │ ││
│ │ Estimativa: 2 sprints ││
│ │ ││
│ │ Tarefas: ││
│ │ ☐ Atualizar react e react-dom ││
│ │ ☐ Atualizar testing-library ││
│ │ ☐ Substituir métodos de ciclo de vida descontinuados ││
│ │ ☐ Atualizar manipulação de eventos ││
│ │ ☐ Resolver avisos de modo estrito ││
│ │ ☐ Atualizar pacotes dependentes ││
│ │ ☐ Teste de regressão completo ││
│ │ ☐ Rollout em estágios ││
│ └─────────────────────────────────────────────────────────┘│
│ │
│ ABORDAGEM: │
│ • Atualizar em branch de recurso │
│ • Corrigir problemas incrementalmente │
│ • Testar completamente │
│ • Implantar atrás de feature flag se possível │
└─────────────────────────────────────────────────────────────┘
Saúde das Dependências
Monitoramento da Saúde do Pacote
INDICADORES DE SAÚDE DAS DEPENDÊNCIAS:
┌─────────────────────────────────────────────────────────────┐
│ │
│ DEPENDÊNCIA SAUDÁVEL: │
│ ✅ Manutenção ativa (commits dentro de 3 meses) │
│ ✅ Responsivo a problemas │
│ ✅ Patches de segurança oportunos │
│ ✅ Versionamento claro (semver) │
│ ✅ Boa documentação │
│ ✅ Tamanho de instalação razoável │
│ │
│ DEPENDÊNCIA NÃO SAUDÁVEL: │
│ ❌ Sem commits em > 1 ano │
│ ❌ Problemas de segurança abertos │
│ ❌ Muitos problemas/PRs não endereçados │
│ ❌ Descontinuado ou arquivado │
│ ❌ Mantenedor único (fator ônibus) │
│ ❌ Dependências transitivas massivas │
│ │
│ ─────────────────────────────────────────────────────────── │
│ │
│ AUDITORIA DE SAÚDE DAS DEPENDÊNCIAS: │
│ │
│ Pacote Saúde Última Atualização Problemas │
│ ────────────── ────── ─────────── ────── │
│ react 🟢 Ativo Bem-mantido │
│ lodash 🟡 Estável Baixa atividade │
│ old-util-lib 🔴 2 anos atrás Descontinuado │
│ │
│ AÇÕES PARA NÃO SAUDÁVEL: │
│ • Encontrar pacote alternativo │
│ • Bifurcar e manter (último recurso) │
│ • Substituir por implementação customizada │
│ • Aceitar risco (documentar decisão) │
└─────────────────────────────────────────────────────────────┘
Arquivos de Lock
Gerenciando Arquivos de Lock
MELHORES PRÁTICAS DE ARQUIVO DE LOCK:
┌─────────────────────────────────────────────────────────────┐
│ │
│ POR QUE ARQUIVOS DE LOCK IMPORTAM: │
│ │
│ Sem arquivo de lock: │
│ "Funciona na minha máquina" ≠ "Funciona no CI" ≠ "Funciona na prod" │
│ │
│ Com arquivo de lock: │
│ Mesmas versões exatas em todos os lugares │
│ Builds reprodutíveis │
│ Sem atualizações surpresa │
│ │
│ ─────────────────────────────────────────────────────────── │
│ │
│ REGRAS: │
│ │
│ 1. SEMPRE COMMITAR ARQUIVO DE LOCK │
│ package-lock.json (npm) │
│ yarn.lock (yarn) │
│ composer.lock (PHP) │
│ Gemfile.lock (Ruby) │
│ │
│ 2. USAR COMANDOS DE INSTALAÇÃO CI │
│ npm ci (não npm install) │
│ yarn --frozen-lockfile │
│ composer install (não update) │
│ │
│ 3. ATUALIZAR INTENCIONALMENTE │
│ Executar npm update quando quiser │
│ Revisar mudanças no arquivo de lock │
│ Não ignorar diffs do arquivo de lock │
│ │
│ 4. RESOLVER CONFLITOS CUIDADOSAMENTE │
│ Deletar e regenerar se complexo │
│ Testar após resolver │
│ │
│ GITSCRUM: │
│ Atualizações de arquivo de lock devem estar em tarefas de dependências │
│ Não escondidas no trabalho de recursos │
└─────────────────────────────────────────────────────────────┘