Yarn: Um novo gerenciador de dependências para JavaScript

Trabalhar com JavaScript hoje em dia sem utilizar um gerenciador de dependências (ou gerenciador de pacotes, se preferir) é quase impensável, apesar de possível.

A maioria das principais linguagens do mercado possuem algum gerenciador de dependências, vamos a alguns exemplos:

  • PHP tem o Composer (https://getcomposer.org/)
  • Ruby tem o RubyGems (https://rubygems.org/)
  • C# (e todo o ecosistema .NET) tem o Nuget (https://www.nuget.org/)
  • Java tem o Maven que, dentre várias coisas, também consegue desempenhar essa função. (https://maven.apache.org/)

E assim por diante. Agora, como fica o JavaScript? Bom, não fica pra trás, garanto! O principal e mais utilizado gerenciador de dependências do momento para JavaScript é o NPM (Node Package Manager).

Comparação entre os principais gerenciadores de dependência para front-end (não focando só em JavaScript): https://github.com/wilmoore/frontend-packagers

O NPM cresceu de forma exponencial nos últimos anos e, por mais que a sua equipe de arquitetura tenha colocado os seus melhores esforços em cima de atualizações e melhorias, a maior reclamação dos desenvolvedores é de que ele é extremamente lento e possui alguns problemas para gerenciar as requisições na rede.

Se você gerencia uma ou outra dependência talvez não sinta tanto, agora, desenvolvedores de aplicações SPA como os que utilizam Ember.js com Ember-CLI ou AngularJS, React etc, certamente lidam com esse gargalho da falta de performance diariamente.

Visando resolver esse e outros problemas surgiu o Yarn, o mais novo gerenciador de dependências para JavaScript.

O Yarn foi anunciado hoje!

JavaScript Básico
Curso de JavaScript Básico
CONHEÇA O CURSO

Yarn

Yarn

Ele foi desenvolvido e está sendo mantido por um grupo de desenvolvedores do Babel JS, Facebook, Ember.js entre outros. O Yarn não veio para substituir o NPM. De forma alguma. Veio pra coexistir. Ser mais uma opção.

A melhor parte: Yarn é totalmente compatível com os registros do NPM. Sim, isso quer dizer que, se você já tem um grande projeto e usa NPM, tudo bem, você pode começar agora mesmo a utilizar o Yarn em substituição sem precisar alterar o seu package.json, por exemplo.

Dentre as principais features do Yarn, destacamos:

  • Se você já instalou um pacote anteriormente, isso fica cacheado e você poderá instalá-lo posteriormente mesmo sem conexão à internet.
  • As dependências serão instaladas da mesma forma e ordem em qualquer máquina.
  • Se uma requisição falhar, ela não fará com que toda a instalação falhe. Ela é refeita.
  • A rede é utilizada de forma inteligente, as requisições são enfileiradas para se obter a melhor performance possível.

Quer saber mais? Veja aqui o post de apresentação da ferramenta feito pelo pessoal do Facebook:

https://code.facebook.com/posts/1840075619545360

Instalando e utilizando o Yarn

Se você já tem o NPM instalado globalmente no seu ambiente, tudo o que você precisa fazer é executar:

npm install -g yarnpkg

Para instalar as dependências do package.json de um projeto, tudo o que você precisa fazer é executar:

yarn

Esse comando é equivalente ao npm install. Isso é tudo! Certamente você notará uma grande diferença.

Nós, aqui do TreinaWeb, tivemos uma melhora de performance de ao menos 500% na instalação das dependências de um projeto nosso.

yarn.lock

Uma das razões para a alta performance (além da eficiência no uso dos recursos da rede) é o fato de que o Yarn gera um lock file muito decente após a instalação (yarn.lock) que registra todas as dependências instaladas no projeto e suas exatas versões, de tal forma que, se a pasta node_modules for removida, tendo o arquivo yarn.lock disponível, ao executar yarn (para instalar as dependências) ele não vai precisar ler o package.json novamente e montar toda uma árvore das dependências, pois isso já está devidamente detalhado no yarn.lock.

Se você trabalha com PHP vai notar a semelhança. O Composer (principal gerenciador de dependências para PHP) gera um arquivo composer.lock nas instalações.


Update: 12/10/2016

O repositório do Yarn passou de poucas estrelas no Github para quase 10k em menos de 1 dia:

https://github.com/yarnpkg/yarn

Muita gente já está usando e comemorando. Taylor Otwell criador do Laravel postou entusiasmado:

Qual usar?

Bom, diante das excelentes opções que temos (NPM, Yarn etc), cabe a você, desenvolvedor, ver o que melhor se encaixa nas suas necessidades.

Até a próxima!

Angular - Introdução
Curso de Angular - Introdução
CONHEÇA O CURSO
Deixe seu comentário