Yarn 2 — o futuro dos gerenciadores de pacotes para JavaScript?
3 de abril de 2020
0 minutos de leituraO que é o Yarn 2?
Yarn 2 é a nova versão do revolucionário e consolidado gerenciador de pacotes npm Yarn, com melhorias como Plug’n’Play, arquitetura de plugins, monorepos, suporte aprimorado a workspaces e instalações zero. Você encontra o repositório da comunidade no GitHub em: https://github.com/yarnpkg/berry.
Por que precisamos de uma nova versão do Yarn?
O Yarn 2 atende a vários pontos que vêm gerando discussões entre desenvolvedores sobre como gerenciar projetos JavaScript:
Monorepos
Seja você fã de monorepos ou não, gerenciá-los exige um bom conjunto de ferramentas para garantir o sucesso e facilitar a administração de projetos grandes e fluxos de trabalho complexos.
Uma combinação popular para configurar um monorepo em projetos JavaScript é usar os workspaces do Yarn (disponíveis desde o Yarn 1) e o Lerna como gerenciador de projetos.
A boa notícia é que, com o Yarn 2, o Yarn também atua como gerenciador de projetos, além de gerenciador de pacotes, e busca oferecer uma experiência completa para executar monorepos sem complicações.
Plug’n’Play
O que ainda não foi dito sobre node_modules? A nova documentação do Yarn detalha as limitações de node_modules como estrutura de pastas e explica por que precisamos de uma nova forma de pensar sobre o gerenciamento de dependências.
A estratégia Plug’n’Play não é exclusiva da nova versão do Yarn: ela já apareceu antes no ecossistema. Kat Marchán apresentou o Tink na JSConf EU 2019 durante sua apresentação. Isso não significa, porém, que a abordagem do Tink para Plug’n’Play seja igual à do Yarn. Vale lembrar que essas ideias vêm se espalhando há algum tempo, em diferentes experimentos no ecossistema JavaScript.
Um aspecto interessante de segurança na implementação do Plug’n’Play no Yarn 2:
A pasta de cache local .yarn/cache é montada como somente leitura, impedindo tentativas maliciosas de modificar pacotes já instalados no sistema de arquivos.
Por sua natureza, o Plug’n’Play no Yarn permite aplicar verificações rigorosas, como impedir que pacotes façam referência aos chamados pacotes fantasmas, que não estão definidos na lista de dependências de um pacote ou projeto.
Plugins
Talvez essa perspectiva seja mais relevante para desenvolvedores e mantenedores do que para usuários finais, mas ainda vale destacá-la. Ao criar o Yarn 2 com TypeScript, surgiu a oportunidade de reduzir a complexidade e o trabalho de manutenção do núcleo, criando uma arquitetura de plugins que permite a outras pessoas estender o Yarn.
E mais recursos?
Em seu anúncio do lançamento do Yarn 2 no dev.to, Maël Nison apresentou vários detalhes sobre os recursos e suas possíveis armadilhas, que fazem do Yarn 2 uma boa escolha para futuros projetos JavaScript e Node.js. Recomendo ler o artigo sobre o lançamento e também a página oficial de recursos do Yarn para saber mais.
Como começar a usar o Yarn 2
O Yarn adotou uma estratégia de instalação por repositório — ou por projeto, se preferir. Isso significa que você pode ter uma instalação global do Yarn, como a primeira versão, clássica, e depois mudar para o Yarn 2 em um projeto específico.
Para começar a usar o Yarn 2, você precisa de uma versão atualizada do Node.js, no mínimo a 10. De todo modo, prefira sempre a versão LTS do Node.js, que recebe suporte e manutenção. As versões anteriores à 10 não são mais compatíveis e não recebem correções de bugs nem de segurança.
Como mudar para a nova versão do Yarn
Para começar, vamos criar um novo diretório e iniciar um projeto:
Vamos conferir sua versão atual do Yarn com yarn --version. Se você estiver usando uma versão anterior à 1.22, digite:
Se a versão local do Yarn for 1.22 ou superior:
Isso deve baixar o Yarn 2 e exibir uma saída como esta:
Depois, você pode verificar sua versão do Yarn com yarn --version. No meu caso, o resultado é:
Como de costume, recomenda-se incluir .yarnrc e .yarnrc.yml no commit para compartilhar as configurações em todo o repositório. Vale notar que a pasta .yarn é usada pelo Yarn para gerenciar o cache, o runtime do Yarn, os plugins e outros dados.
A atualização da política de downloads do Yarn 2 baixa uma cópia da versão mais recente para a pasta local .yarn/ e cria um arquivo .yarnrc que registra o caminho no disco até a versão instalada.
Como instalar módulos npm no Yarn 2
Vamos adicionar o framework web Fastify, do Node.js, às nossas dependências:
Você já pode notar algumas mudanças na nova saída do Yarn:
Cada conjunto de tarefas relacionadas que ocorre durante a instalação é agrupado.
O Yarn inclui uma referência a cada grupo de tarefas na saída da CLI. Assim, se houver algum problema com um deles, fica mais fácil investigar e resolver.
O arquivo de lock continua sendo a forma preferida do Yarn para fixar as dependências e garantir versões reproduzíveis e auditáveis. A novidade no Yarn 2 é que agora ele usa a sintaxe YAML de verdade.
Os comandos comuns de gerenciamento de pacotes continuam iguais aos das versões anteriores do Yarn:
yarn add [package] --devyarn remove [package]yarn up [package]
Para executar JavaScript ou Node.js, você precisa do Yarn
Como o diretório node_modules não existe mais, executar um script avulso, como node script.js, não vai funcionar, pois o Node.js não conseguirá resolver as dependências indicadas nesse arquivo. Por isso, você precisa executar yarn node script.js. O Yarn iniciará o processo do Node com um arquivo próprio que ajusta parte da lógica para permitir o funcionamento do PnP. Para isso, ele usa a flag de CLI integrada ao Node --require.
Vale lembrar também que não é necessário usar yarn node dentro dos scripts definidos no campo scripts (que já é como muitas ferramentas são executadas): basta chamar node. Obrigado ao Mael por esclarecer isso!
O que vem por aí?
O Yarn 2 ainda precisa ganhar experiência e passar pela avaliação da comunidade para provar que resistirá ao teste do tempo e conquistará reconhecimento na comunidade JavaScript pelas ideias inovadoras que implementa e desenvolve.
Recomendo acessar o site do Yarn para consultar a documentação completa em https://yarnpkg.com/cli/install enquanto você testa a ferramenta no seu próximo projeto.
Comece a resolver desafios de capture the flag
Aprenda a resolver desafios de capture the flag assistindo sob demanda ao nosso workshop virtual introdutório.



