DEV Community

Cover image for Diferença entre NPM e Yarn
Asafe Dainez
Asafe Dainez

Posted on

Diferença entre NPM e Yarn

Contexto

Pra entender o Yarn é interessante saber o motivo pra ele ser desenvolvido. Antes dele ser criado, o NPM tinha vários problemas crônicos como velocidade de instalação dos pacotes e um grave problema com segurança dos pacotes disponibilizados, não verificando se existiam requisições suspeitas dentro dos pacotes baixados.
Então na época o Yarn trouxe uma velocidade de instalação muito maior por instalar os pacotes em paralelo, ao contrário do NPM que utiliza instalação sequencial. Mas algo que trouxe muita relevância pro Yarn foi a segurança que ele trazia pois suas políticas de segurança eram muito melhores do que o NPM tinha.

Após muitas atualizações o NPM melhorou muito e trouxe várias melhorias para o tempo de instalação, que está similar e em questão de segurança.

Então antes o Yarn era uma solução, mas hoje, é uma alternativa pois o NPM e Yarn já estão muito parecidos e é mais uma preferência pessoal de uso.

Os comandos são extremamente similares, facilitando o aprendizado e migração de um para o outro.

Características

NPM

  • Instalação sequencial;
  • Nativo no node.js;
  • Cria arquivo package-lock.json
  • Compatibilidade com todas as versões do node

    Desvantagens:

  • Saída de comandos ou erros retornados difíceis de ler

  • Apesar de todas as melhorias com segurança, ainda existem algumas vulnerabilidades

Yarn

  • Instalação paralela
  • Gera arquivo yarn.lock
  • Defende a velocidade e segurança
  • Cache de alguns pacotes (gerando maior velocidade na instalação)

    Desvantagens:

  • Não funciona com node V5 ou mais antigos

  • Necessita ser instalado 'por fora' (utilizando NPM ou outra forma)

Yarn 2.x

O Yarn 2.X é uma nova forma de gerenciador de pacotes pois ele cria uma espécie de BD de pacotes na sua máquina para evitar várias instalações de pacotes de diferentes projetos. Existem algumas vantagens com isso como reaproveitamento de pacotes (zero installs). Nessa versão não se usa a pasta node_modules, pois os pacotes estão instalados em outro local no seu computador. Para linkar os pacotes é gerado um arquivo chamado .pnp.cjs (Plug'n'Play).

Top comments (0)