Testar grátis
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                     │
└─────────────────────────────────────────────────────────────┘

Soluções Relacionadas