Cuidado com --force e --legacy-peer-deps

Neste post, vou explicar quando deve ser usado e quais as diferenças entre npm install com --force e com --legacy-peer-deps. Essas são duas opções que podem ser úteis quando você tem problemas de compatibilidade entre as dependências do seu projeto.

Tá ligado naquelas flags --force e --legacy-peer-deps? aquelas que a gente usa com o npm install pra "resolver" os problemas de conflitos com os pacotes npm de um projeto. Neste post vou explicar melhor sobre o uso e o não uso dessas flags.

A um tempo atrás em um projeto grande que trabalhei em uma empresa, esse projeto tinha muitos pacotes externos com funcionalidades

O que é npm install?

npm install é um comando que instala todas as dependências listadas no arquivo package.json do seu projeto. Esse arquivo contém informações sobre o nome, a versão, os scripts e as dependências do seu projeto. As dependências são os pacotes que o seu projeto precisa para funcionar corretamente.

O que são dependências peer?

As dependências peer são um tipo especial de dependência que especifica quais versões de outros pacotes são compatíveis com o seu pacote. Por exemplo, se você está desenvolvendo um componente React, você pode declarar que ele precisa de uma versão específica do React como dependência peer. Isso significa que o seu componente só vai funcionar se o projeto que o usa tiver essa versão do React instalada.

O que acontece se houver conflitos entre as dependências peer?

Às vezes, pode acontecer de você ter duas ou mais dependências no seu projeto que exigem versões diferentes de um mesmo pacote como dependência peer. Por exemplo, se você tem um componente React que precisa do React 16 e outro componente React que precisa do React 17, você vai ter um conflito entre as dependências peer.

Nesse caso, o npm install vai mostrar um erro e não vai instalar as dependências corretamente. Isso pode causar problemas no funcionamento do seu projeto, pois algumas dependências podem estar faltando ou incompatíveis.

Como resolver os conflitos entre as dependências peer?

Existem duas formas de resolver os conflitos entre as dependências peer: usando o --force ou o --legacy-peer-deps.

O --force é uma opção que faz o npm install ignorar os erros de compatibilidade entre as dependências peer e instalar todas as dependências mesmo assim. Isso pode ser útil se você sabe que o seu projeto funciona com as versões conflitantes das dependências peer, ou se você quer testar rapidamente algo sem se preocupar com os erros.

O --legacy-peer-deps é uma opção que faz o npm install usar o comportamento antigo do npm 6, que não verificava os conflitos entre as dependências peer. Isso pode ser útil se você quer manter a compatibilidade com projetos antigos que usavam o npm 6 ou se você quer evitar mudanças inesperadas nas suas dependências.

Quando deve ser usado e quais as diferenças entre npm install com --force e com --legacy-peer-deps?

A escolha entre usar o --force ou o --legacy-peer-deps depende da sua situação e das suas preferências. Ambas as opções têm vantagens e desvantagens.

A vantagem do --force é que ele permite instalar todas as dependências sem erros, mesmo que elas tenham conflitos entre si. Isso pode ser bom para testar rapidamente algo ou para usar versões mais recentes das dependências.

A desvantagem do --force é que ele pode causar problemas no funcionamento do seu projeto, pois ele ignora os requisitos de compatibilidade das dependências. Isso pode fazer com que algumas funcionalidades não funcionem corretamente ou que surjam bugs inesperados.

A vantagem do --legacy-peer-deps é que ele mantém o comportamento antigo do npm 6, que não verificava os conflitos entre as dependências peer. Isso pode ser bom para manter a compatibilidade com projetos antigos ou para evitar mudanças inesperadas nas suas dependências.

A desvantagem do --legacy-peer-deps é que ele pode deixar de instalar algumas dependências necessárias para o seu projeto, pois ele não atualiza as versões das dependências peer. Isso pode fazer com que algumas funcionalidades não estejam disponíveis ou que surjam erros de versão.

Em geral, recomenda-se usar o --force ou o --legacy-peer-deps somente em casos específicos e temporários, quando você tem certeza de que eles não vão causar problemas no seu projeto. O ideal é sempre tentar resolver os conflitos entre as dependências peer de forma definitiva, atualizando as versões dos seus pacotes ou procurando alternativas compatíveis.