Porque você deveria dar uma chance ao Yarn?

Porque você deveria dar uma chance ao Yarn?

Colabore com o Blog!

Olá, para ajudar a melhorar o blog, eu criei um pequeno questionário que você pode responder menos de 2 minutos.

Participe e ajude a fazer o blog ainda melhor! Saiba mais

Eu comecei a utilizar Yarn no inicio deste ano, e tanto eu quanto a equipe tivemos uma melhoria em nossos builds e tempo de deploy.

Yarn é um novo gerenciador de pacotes JavaScript criado pelo Facebook, simples de utilizar e de fácil adoção. Tenho que adimitir que o NPM vem evoluindo muito nos ultimos meses, mas também percebi que muitas das implementações que implementa, em sua grande maioria já existe no Yarn a algum tempo.

Em um pequeno exemplo, eu vou tentar algumas coisas que simplesmente fazem o Yarn substituir o NPM e quem ganha com isso é você.

Você provavelmente já deve ter lido algo sobre ou até mesmo estar utilizando-o, mas por conta do enfim release de sua versão 1.0, que nós adotamos assim que vimos, tive que escrever sobre isso.

Yarn já não é algo tão novo, nasceu em 2016 e tem sido adotado rapidamente pelos desenvolvedores como substitudo ao NPM. Por mais que eu tenha um certo carinho pelo NPM, tenho que admitir que por sua vez, o Yarn saiu na frente ao implementar algo muito engenhoso, o arquivo yarn.lock.

O arquivo yarn.lock

Em uma rapida explicação, assim como o NPM, ele também utiliza o arquivo package.json e a pasta node_modules mantendo compatibilidade com projetos baseados em NPM, que caso você já esteja familiarizado, quer dizer que você também estará meio familiarizado com Yarn.

O arquivo yarn.lock bloqueia as dependências instaladas em uma versão especifica, o que assegura que uma mesma instalação em um ambiente totalmente diferente, a mesma estrutura de arquivos e dependencias funcione, algo semelhante ao composer.lock e o Gemfile.lock.

Vamos dizer que você esta trabalhando em um projeto XPTO, e um companheiro de equipe modificou uma dependência no package.json e faça commit para o repositório git.

Normalmente uma branch base para desenvolvimento (master/develop).

Mais tarde, você precisa fazer um pull das mudanças do projeto antes de abrir seu pull request, para garantir que tudo esta OK e rodar seu CI ou até mesmo fazer deploy em ambiente de dev. Com isso você roda o comando yarn install, onde o arquivo yarn.lock é atualizado, o que você é possível ver em um simples git diff yarn.lock.

Através disso, yarn mostra a validação do pacote através de #hashes entre ambientes e dependencias diferentes.

Apenas um pouco mais

Em questões de performance, yarn paraleliza as instalações o que maximiza a utilização dos recursos e torna o processo mais rápido.

Algumas outras caracteristicas legais do yarn é que ele cria um cache das dependencias instaladas anteriormente, o que evita precisar baixar o mesmo pacote da internet novamente. Sim, ele funciona offline. :heart:

Além é claro de ser compatível com os registros do NPM e Bower.

E o que mais?

Depois de quase um ano de sua divulgação publica, finalmente sua versão 1.0 esta disponível para uso com alguns brinquedos novos.

  • Yarn Workspaces
  • Auto-merge dos arquivos .lock
  • Resoluções de versões melhores

A parte do workspace ainda esta um pouco turva pra mim entender. Eu recomendo a você ler mais sobre workspaces neste artigo para entender melhor.

A nova versão inclui muitas melhorias, que graças a comunidade esta fazendo o projeto crescer rápido em muito pouco tempo. Yarn tornou-se um projeto ativo dentro da comunidade open-source, com mais de 195.000 projetos no Github utilizando o arquivo yarn.lock e até agora tem quase 3 bilhões de downloads por mês.

Migração

TL;DR

Você pode verificar a instalação para o seu tipo de ambiente diretamente no site oficial.

Após instalarmos o Yarn, para fazermos a migração podemos simplesmente utilizar o comando yarn install caso você já tenha um projeto rodando com o NPM, se não utilize o comando yarn init, que ira gerar nosso arquivo package.json assim como o NPM faz.

Alguns comandos:

  • yarn === npm install
  • yarn init === npm init
  • yarn add <package_name> === npm install <package_name> --save
  • yarn remove <package_name> === npm uninstall <package_name> --save
  • yarn add <package_name> --dev === npm install <package_name> --save-dev
  • yarn global add <package_name> --dev === npm install <package_name> --global

Você pode verificar a lista através da própria documentação, ou checar esta versão de comandos feita pelo @justinhuskey.

O NPM vai morrer?

A resposta quanto a isso é não, ao menos eu gosto de pensar que não.

O NPM esta tentando acompanhar a corrida, e em sua versão 5.0 lançada em Maio deste ano, incliui algumas funcionalidades notáveis, tais como um lock file (package-lock.json) e o auto install sem a necessidade da flag --save, além é claro de uma melhoria de performance comparado as versões anteriores. Ele continua sendo amplamente utilizado dentro da comunidade Node.js, e eu espero que ambos os dois continuem com a competição para termos melhorias constantes.

Mesmo que você você esteja bem utilizando o NPM 5, eu pessoalmente acho que você notaria a direferença de performance utilizando yarn no seu processo de build e deploy, eu sei porque eu notei. Um ponto interessante é que você pode continuar utilizando NPM juntamente com o Yarn, você pode experimentar ambos por um periodo e dizer-me se você adotou ou não (embora eu saiba que você vai gostar).

Isso é tudo pessoal.

References

Join the Conversation