Começando com Yarn
Yarn é o novo dependency manager criado principalmente pelos devs do Facebook, mas com outros contribuidores de fora.
Por quê?
A moral por trás de um projeto precisa sempre ser a de solucionar algum problema. Reinventar a roda, na minha opinião, inclusive fere o paradigma da cultura Open-Source: pra que criar algo do zero, se podemos contribuir e tornar algo já existente ainda melhor? Enfim, pra quem estiver mais curioso, recomendo a leitura do artigo do pessoal do Facebook sobre o Yarn.
De uma forma geral, o cliente do npm vinha fazendo um trabalho satisfatório. Muitas pessoas têm lá suas reclamações e se depararam uns probleminhas chatos que poderiam ter sido evitados, mas convenhamos, ninguém ficou na mão. Yehuda Katz - cujo currículo daria um post a parte e é, entre outras coisas, criador do Ember.js e membro do TC-39 - menciona isso de certa forma em seu artigo recente sobre o Yarn.
Principais diferenças
Open-source: É isso. Enquanto o cliente do npm é uma ferramenta privada, da qual uma empresa detém total controle, o Yarn é open-source, feito e mantido pela comunidade. Só isso já pode ser motivo suficiente para alguns migrarem.
Registros múltiplos: O Yarn suporta os registros do Bower. Portanto, com apenas um dependency manager é possível gerenciar tanto os pacotes do npm quanto os do bower.
Determinístico: Yarn garante que cada vez que tu instala as tuas dependências, a árvore do diretório
node_modules
se mantém igual. Isso evita alguns bugs chatos e difíceis de encontrar. Sem essa de "funciona na minha máquina"!Modo offline: O Yarn trabalha com um Cache Global. Basicamente, isso significa que, uma vez instalada, a dependência vai estar disponível offline pra ser usada novamente.
E não para por aí. Olhando a documentação com mais calma, vocês vão achar informações sobre Resiliência de Rede (uma vez que a requisição falha, a instalação não quebra e Yarn tenta de novo) e Performance (sim, é rápido!!)
Instalação
Yarn quebrou o processo em 3 etapas, o que torna a interface mais clara e amigável ao usuário:
Resolution: Faz as requisições e encontra as dependências.
Fetching: Confere se o pacote está disponível no Global Cache (modo offline). Caso não esteja, busca no repositório e os salva para que fiquem disponíveis lá.
Linking: Estabelece os links com o Global Cache.
Comece a usar
Para começar é bastante simples:
npm i -g yarnpkg
Feito. Dá olhada nesse link com um guia de comandos do npm e seus equivalentes.
Bônus
Caso tudo isso que mencionei acima ainda não seja motivador suficiente pra tu migrar pro Yarn, aí vão mais dois comandos que devem dar o empurrão final.
yarn clean
Remove os arquivos desnecessários das suas dependências (esteja pronto para o susto a primeira vez que tu rodar esse!)
yarn why <package>
Identifica o porquê deste pacote ter sido instalado, se é subdependência de algum outro ou se é uma dependência direta do projeto.
Conclusão
Decidi começar com o Yarn devagar, mas a interface é tão mais amigável e a performance é tão boa que eu me senti compelido a migrar completamente. Aliás, se o Facebook já pode usar em produção, por que eu não?! Hehe. E você? Já experimentou? Deixa aí nos comentários a tua experiência.