«npm WARN requires a peer»: como corrigir e entender a essência do erro

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Introdução: por que o npm está gritando com você?

\n\n

Você já executou npm install e viu algo assim?

\n\n
npm WARN ts-patch@3.2.1 requires a peer of typescript@>=4.0 but none is installed. You must install peer dependencies yourself.
\n\n

Familiar? Se sim — você não está sozinho. Esta pergunta no Stack Overflow acumulou milhares de visualizações e dezenas de comentários de desenvolvedores que, como você, queriam apenas instalar um pacote e acabaram com uma dor de cabeça. Hoje vamos entender o que são peer dependencies, por que o npm insiste tanto para instalá-las e como trabalhar corretamente com elas em projetos TypeScript. E sim, isso não será uma documentação chata, mas uma análise prática com exemplos de código.

\n\n

Vamos lá!

\n\n

O que são peer dependencies e para que servem?

\n\n

Imagine que você está montando um quebra-cabeça. Você tem a imagem principal (seu projeto) e várias peças (pacotes). Algumas peças se encaixam perfeitamente, mas apenas se você usar a moldura correta. No mundo do npm, essa "moldura" é a peer dependency.

\n\n

Peer dependency (ou "dependência de pares") é uma exigência de um pacote de que uma determinada biblioteca esteja instalada no projeto, mas o próprio pacote não a instalará. Por quê? Porque essa biblioteca já deve estar presente, e o pacote apenas "se dá bem" com ela, sem criar duplicatas.

\n\n

Por exemplo, o pacote ts-patch (uma ferramenta popular para TypeScript) exige que o typescript esteja instalado no projeto. Mas o ts-patch não instala o TypeScript por conta própria — ele presume que você já o adicionou. Se o TypeScript não estiver presente, o npm emite o aviso mencionado.

\n\n

Por que isso é importante para projetos TypeScript?

\n\n

TypeScript não é apenas uma linguagem, é um ecossistema. Muitos pacotes (por exemplo, @types/react, ts-loader, eslint-plugin-typescript) funcionam sobre o TypeScript. Se você tem a versão 5.0 do TypeScript instalada e o pacote requer 4.0+, está tudo bem. Mas se o TypeScript não estiver instalado, começam os problemas.

\n\n

Aqui está um exemplo real da prática. Suponha que você está escrevendo um pequeno script em TypeScript e usando ts-patch para transformação de código. Você executa:

\n\n
npm install ts-patch --save-dev
\n\n

E obtém:

\n\n
npm WARN ts-patch@3.2.1 requires a peer of typescript@>=4.0 but none is installed.\nYou must install peer dependencies yourself.
\n\n

O que fazer? Entrar em pânico? Não. Basta instalar o TypeScript:

\n\n
npm install typescript --save-dev
\n\n

Problema resolvido. Mas e se você já tiver o TypeScript, mas de outra versão? Aí começa a parte interessante.

\n\n

Comparação de abordagens: como instalar peer dependencies

\n\n

Existem várias maneiras de lidar com esse erro. Vamos compará-las usando um projeto TypeScript como exemplo.

\n\n

Abordagem 1: Instalação manual (clássica)

\n\n

A maneira mais simples e confiável é ler o aviso e instalar manualmente o pacote necessário. Você vê que é necessário typescript@>=4.0 e o adiciona:

\n\n
npm install typescript@^4.0 --save-dev
\n\n

Vantagens:

\n
    \n
  • Controle total sobre a versão.
  • \n
  • Sem surpresas ocultas.
  • \n
\n

Desvantagens:

\n
    \n
  • É necessário ler atentamente as mensagens do npm.
  • \n
  • Se houver muitos pacotes, o processo se torna repetitivo.
  • \n
\n\n

Esta abordagem é ideal para projetos pequenos, onde você sabe exatamente quais dependências precisa.

\n\n

Abordagem 2: Instalação automática com npx ou plugins

\n\n

Algumas ferramentas, como npm-check ou install-peerdeps, podem instalar automaticamente todas as peer dependencies para um pacote específico. Instale o utilitário globalmente:

\n\n
npm install -g install-peerdeps
\n

Blogs

Book Recommendations