Skip to main content

Problema ao atualizar versão quando dependência não oferece suporte

· 3 min read
Bruno Carneiro
Fundador da @TautornTech

Manter uma code base atualizada pode se tornar difícil à medida que o projeto cresce e novas funcionalidades e bibliotecas vão sendo adicionadas.

Durante todo o projeto, atualizações minor e patch são muito comuns nas bibliotecas e, na maioria dos casos, não causam transtornos e até mesmo são transparentes para o time de desenvolvimento.

Major Releases

Grandes mudanças costumam ocorrer nas Major releases.

Esse tipo de versão pode trazer alterações significativas no core da biblioteca, impactando diretamente os desenvolvedores. Algumas bibliotecas fornecem recursos para auxiliar na atualização do código, como mencionei neste post, mas existe um aspecto que vai além da atualização do próprio código: a atualização interna das dependências.

O Problema das Dependências

Bibliotecas que utilizam o npm como gerenciador de pacotes frequentemente informam os submódulos e suas versões necessárias para o funcionamento interno.

Mesmo que eu atualize meu projeto para a versão 19, por exemplo, uma dependência que utilizo pode não ter sido atualizada, o que impedirá a atualização do meu próprio projeto.

Como Resolver

Uma forma bem legal de contornar isso é realizar um fork do projeto, fazer a atualização e abrir um Pull Request com a solução.

É claro que isso vai demandar tempo e pode não ser tão simples, mas é uma possibilidade válida e super legal porque é uma forma de colaborar com um projeto que você utiliza.

Outra forma, mas que não recomendo, é usar o comando:

npm install --legacy-peer-deps

Esse comando informa ao npm para ignorar a atualização, mas isso pode gerar problemas no código.

Por isso é muito importante utilizar ferramentas que possuem comunidade forte e que acompanham a evolução de suas dependências.

Forçar a instalação de dependências pode introduzir riscos de compatibilidade. Por isso é altamente recomendável testar minuciosamente sua aplicação após realizar essas alterações para garantir que tudo funcione conforme o esperado.

Existem casos que até mesmo uma substituição de biblioteca é a solução, uma vez que não existem garantias de atualizações nos projetos.

Conclusão

Por isso, é muito importante utilizar ferramentas que possuem uma comunidade forte e que acompanham a evolução de suas dependências.

Estou enfrentando esse problema recentemente com a ferramenta React-Ace, a versão 13.0 que utilizo não tem como peerDependencie a versão 19 do React, causando o problema.

"peerDependencies": {
  "react": "^0.13.0 || ^0.14.0 || ^15.0.1 || ^16.0.0 || ^17.0.0 || ^18.0.0",
  "react-dom": "^0.13.0 || ^0.14.0 || ^15.0.1 || ^16.0.0 || ^17.0.0 || ^18.0.0"
},

Estou utilizando um fork que já implementou suporte à nova versão, enquanto aguardo a atualização oficial da biblioteca.