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!
Curso JavaScript Básico
Conhecer o cursoYarn
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:
--------Finally I can stop getting e-mails about people's 20 minute "npm install" processes timing out! ?
— Taylor Otwell (@taylorotwell) October 11, 2016
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!