Executando verificação de segurança...
1

YARN, NPM ou PNPM?

Fala galera, queria entender melhor as diferenças entre esses 3 gerenciadores de dependência do Node. Porque muitas vezes usamos algum desses mas não entendemos realmente o que acontece por baixo dos panos. Aqui ficam algumas perguntas:

  • Porque usar um e não usar outro?
  • Tem um melhor que o outro?
  • Falem sobre experiências usando eles

Agradeço pelas respostas 🙏

Carregando publicação patrocinada...
1

Usei Yarn por muito tempo, atualmente uso apenas NPM.

Muita gente que usa o Yarn, ainda uso na versão 1.22 e se não me engano ele já está na versão 3. Isso pq da versão 1 para a 2, eles mudaram algumas coisas que fizeram muitos projetos com libs antigas pararem de buildar, por isso muita gente ainda se mantém na versão 1 (também chamada de versão clássica).

Tentei usar o NPMN, mas comecei a também ter problemas com builds e não quis ficar perdendo muito tempo nisso.

O NPM funciona bem, dificilmente você terá um problema com o build por conta dele. A desvantagem é o espaço em disco, nem chega a ser um problema tão grande assim, e também eu normalmente apago os diretórios de projetos que já estão no github e tem um tempo que não altero.

1

Estive em um projeto que só funcionava com npm install --legacy-peer-deps se fosse da forma comum npm install as libs quebravam, sabe dizer o porquê?

1

O comando npm install --legacy-peer-deps é usado para contornar a funcionalidade de instalação automática de peerDependency ao instalar pacotes. Ele diz ao NPM para ignorar as dependências de pares e instalar apenas o pacote.

No NPM v7+, por padrão, npm install falhará quando encontrar peerDependencies conflitantes. Isso não era assim antes. Se você já tem um peerDependency instalado, mas não com uma versão nomeada pelo módulo, então o NPM v7+ lançará um erro. Adicionar --legacy-peer-deps ignora esse novo requisito, com o risco de introduzir mudanças que quebram a funcionalidade.

Portanto, se o seu projeto estava quebrando com npm install, é provável que houvesse algum conflito de dependência que estava sendo ignorado com o uso de --legacy-peer-deps. Isso pode acontecer quando diferentes pacotes no seu projeto dependem de diferentes versões da mesma biblioteca. Com --legacy-peer-deps, o NPM ignora esses conflitos e prossegue com a instalação.

1

E uma vez usado o --legacy-peer-deeps, como tratar as peerdependecies manualmanente no package.json e nao precisar usar ele projeto?

Falo isso por quê na empresa subimos docker com legacy-peer-deps e vez ou outra temos que mudar versao na mao,corre o risco de quebrar algua feature no sistema..

1

Eu não sei se entendi sua pergunta, se você diz em deixar o "legacy-peer-deeps" ligado por padrão, você pode criar um arquivo .npmrc no mesmo nível de diretórios que o package.json e no conteúdo dele colocar:

legacy-peer-deps=true

Com isso não precisaria passar esse parâmetro ao npm install ou npm ci.
Mas novamente, não sei se entendi sua pergunta corretamente.

1

Bem, quero eu mesmo resolver as peer dependences para cada pacote.

Caso eu tenha um pacote com conflito de dependencias, basta criar uma peerDependencies com os pacotes listados no erro. Segue exemplo abaixo:

"peerDependencies": { "@angular/core": "^6.0.0" "@angular/core": "^7.0.0" }

Outra forma de adicionar a dependencia no projeto é executar o comando abaixo com a dependencia a ser adicionada e sua respectiva versão:

npm install --save-peer react^16.8.3 || ^17

0

Olá, Sou Espezzialy!

Vou tentar resumir com base no meu uso.

Não existe uma resposta única para essa pergunta, pois a escolha entre Yarn, NPM e PNPM depende das necessidades do seu projeto e das preferências pessoais. O melhor gerenciador de dependências varia de caso para caso. Se o desempenho é uma prioridade e você não se importa com o espaço em disco, o Yarn ou o PNPM podem ser melhores. Se você está confortável com o NPM e não tem problemas de desempenho, pode continuar usando-o.

Yarn : pode ser especialmente vantajoso em ambientes de CI/CD onde a rapidez na instalação de dependências é importante, fora que o desempenho é superior ao npm

NPM: muito utilizado e bem documentado, o que o torna uma escolha sólida para a maioria dos projetos. Além disso, sua integração com o ecossistema Node.js é excelente.

PNPM: bom por conta da economia de espaço em disco que o PNPM oferece e também tem melhorias na velocidade de instalação. É uma escolha popular para projetos que têm preocupações com espaço em disco.

Minha lista seria para uso pessoal:
PNPM > Yarn > NPM

Para profissional:
Yarn > PNPM > NPM

Isso significa que NPM é pior?
NÃO!

Significa que a experiência de uso das outras pode ser mais vantajosa apenas