Se você programa em NODE.js, provavelmente tem uma relação bem próxima com o gerenciador de pacotes (Package Manager) NPM. Desde o início da criação do NODE o NPM teve um papel central e em alguns casos determinante no sucesso da tecnologia. A facilidade de gerenciar bibliotecas e pedaços de códigos com o NPM fez a comunidade de NODE ser ativa da mesma maneira que as gemas (Gems) no Ruby on Rails.
Contudo, recentemente um concorrente andou ganhando destaque no universo da plataforma em JavaScript: o Yarn.
Aproveite também para conferir as melhores bibliotecas JavaScript para 2018.
Histórico
Em um passado recente para se desenvolver um software ou um site você tinha que achar o pacote ou biblioteca online, fazer o download da versão em .zip, extrair, adicionar ao seu projeto e torcer para estar tudo ok. Poucas pessoas eram ativas no desenvolvimento e melhora desses packages e o controle de versão era uma complicação imensa.
Para solucionar essa dificuldade, gestores de pacotes (que agora vou me referir apenas como package managers) como o Bower começaram a surgir. Como a maior parte dos packages são open source (código aberto) e sua disponibilidade era em repositórios de controle de versão, como o Github, essas ferramentas ajudaram a organizar, baixar, atualizar e aplicar códigos para sua reutilização em diversos projetos.
O [Se você programa em NODE.js, provavelmente tem uma relação bem próxima com o gerenciador de pacotes (Package Manager) NPM. Desde o início da criação do NODE o NPM teve um papel central e em alguns casos determinante no sucesso da tecnologia. A facilidade de gerenciar bibliotecas e pedaços de códigos com o NPM fez a comunidade de NODE ser ativa da mesma maneira que as gemas (Gems) no Ruby on Rails.
Contudo, recentemente um concorrente andou ganhando destaque no universo da plataforma em JavaScript: o Yarn.
Aproveite também para conferir as melhores bibliotecas JavaScript para 2018.
Histórico
Em um passado recente para se desenvolver um software ou um site você tinha que achar o pacote ou biblioteca online, fazer o download da versão em .zip, extrair, adicionar ao seu projeto e torcer para estar tudo ok. Poucas pessoas eram ativas no desenvolvimento e melhora desses packages e o controle de versão era uma complicação imensa.
Para solucionar essa dificuldade, gestores de pacotes (que agora vou me referir apenas como package managers) como o Bower começaram a surgir. Como a maior parte dos packages são open source (código aberto) e sua disponibilidade era em repositórios de controle de versão, como o Github, essas ferramentas ajudaram a organizar, baixar, atualizar e aplicar códigos para sua reutilização em diversos projetos.
O Bowertinha seus problemas, então uma solução melhorada surgiu com o nome de NPM. Só que a partir do ponto que Node escolheu o NPM como seu package manager padrão ele cresceu imensamente e hoje é um dos maiores gerenciadores disponíveis.
Problemas com NPM
O NPM é muito bom, mas também não é perfeito. Com o avanço das tecnologias e com a transformação do uso dessas tecnologias, veja alguns dos problemas que hoje o gerenciador enfrenta:
- Dependências aninhadas (Nested dependencies): A versão 2 do NPM aninha as suas dependências, o que leva a duplicações. Isto é, um mesmo pacote pode ser baixado várias vezes em um mesmo projeto. Ao mesmo tempo, se você é um usuário de Windows isso também levará a um problema de caminho grande. Deletar as pastas das dependências acaba se tornando um problema por esse motivo para esses usuários, mas na versão 3 do NPM isso foi resolvido.
- Instalação em fila: Quando NPM busca as dependências de seus repositórios ele instala cada dependência uma depois da outra, o que gasta um tempo enorme para instalar um projeto e começar a trabalhar nele.
- Registro único: Se um pacote não está no NpmJS, você não vai conseguir baixá-lo.
- Não há instalação offline
Introduzindo Yarn
O Yarn nasceu de uma iniciativa de gigantes da tecnologia, como Facebook e Google, para a criação de um package manager melhor, mais rápido e mais seguro.
Essa ferramenta possibilita utilizar de pacotes e bibliotecas de múltiplos registros, como NpmJS e Bower e roda as instalações em paralelo. Se você já tiver algum pacote instalado, o Yarn cria uma cópia em cache, facilitando a instalação offline de pacotes. Além disso, já desde o início ele oferece uma estrutura plana de dependências, contrastando com a aninhada do NPM.
Se um request de um pacote qualquer falhar, não vai causar o erro na instalação imediatamente. Ele irá tentar novamente após falhas. Ou seja, considerando tudo que vimos o Yarn é uma melhor alternativa para o NPM por proporcionar uma dinâmica de trabalho melhor.
Instalando o Yarn
Há duas formas hoje para instalar o Yarn no seu computador. O primeiro método é utilizar o próprio NPM – é tipo instalar o Chrome baixando ele no Internet Explorer).
npm install -g yarn
Esse comando instala o Yarn globalmente e faz o comando yarn ficar disponível no terminal ou prompt de comando.
O segundo método é ir ao site oficial e baixar o instalador para o seu sistema operacional.
É importante mencionar que ambos jeitos necessitam que o Node.js esteja instalado previamente.
Como o Yarn funciona
O Yarn não substitui o NPM, mas sim o melhora. ele utiliza o mesmo arquivo package.json e salva as dependências na pasta node_modules/. Para testar, vamos ver um exemplo de um arquivo package.json de um projeto.
"dependencies": {
"agenda": "^0.8.1",
"agendash": "^0.3.1",
"bcrypt-nodejs": "_",
"body-parser": "^1.15.0",
"busboy": "^0.2.12",
"cloudinary": "^1.3.1",
"connect-flash": "_",
"connect-mongo": "^1.1.0",
"cookie-parser": "^1.4.1",
"cookie-session": "^1.2.0",
"errorhandler": "^1.4.3",
"express": "^4.13.4",
"express-session": "^1.13.0",
"ip": "^1.1.2",
"jade": "^1.11.0",
"method-override": "^2.3.5",
"mkdirp": "^0.5.1",
"mongodb": "^2.1.8",
"mongoose": "^4.4.7",
"morgan": "^1.7.0",
"multer": "^0.1.8",
"node-moip": "0.0.2-2",
"node-transloadit": "_",
"nodemailer": "^2.3.0",
"nodemon": "^1.9.1",
"passport": "^0.3.2",
"passport-facebook": "^2.1.0",
"passport-google-oauth": "^1.0.0",
"passport-local": "_",
"passport-twitter": "^1.0.4",
"qs": "^2.4.2",
"request": "^2.73.0",
"response-time": "^2.3.1",
"sendgrid": "^2.0.0",
"stylus": "^0.54.2"
}
Em seguida, podemos criar uma pasta chamada yarn e copiar o arquivo package.json para lá. Para instalar as dependências vá pelo terminal ou prompt de comando até a raiz desse diretório e rode o comando yarn
ou yarn install
.
Se você ainda não tiver um arquivo package.json, basta rodar o comando yarn init.
Isso irá gerar uma série de perguntas para já criar um arquivo baseado dos seus objetivos.
Adicionar, atualizar e remover dependências
Para adicionar uma dependência, o comando é:
yarn add \[package-name\]
Se você quiser uma versão ou tag específica, pode fazer da seguinte forma:
yarn add \[package\]@\[versão-ou-tag\]
Para dependências de desenvolvimento (dev dependencies), opcionais ou peer, pode usar os comandos --dev
--peer
--optional
.
yarn add gulp --dev
Isso irá salvar o gulp no bloco de devDependencies
. Para atualizar ou remover um pacote, precisamos apenas trocar o comando add
para ou upgrade
ou remove
seguido do nome do pacote.
# atualizar o gulp de 3.9.1 para a versão 4
yarn upgrade [email protected]
# remover o gulp
yarn remove gulp
O arquivo yarn.lock
Após cada instalação, atualização ou remoção, o Yarn atualiza um arquivo chamado yarn.lock que irá manter um controle sobre cada pacote instalado na pasta node_modules.
Uma dica bacana é que você deverá adicionar esse arquivo no seu controle de versão se quiser uma consistência nos pacotes.
Removendo o lixo
A maior parte dos packages managers vêm com muito lixo e coisas inúteis. Utilizando uma imagem de guy fierri podemos ver como o Yarn ajuda nessa questão ao rodarmos o comando yarn clean
. Ele irá remover todo o lixo que conseguir.
Após o comando um arquivo chamado .yarnclean será criado e irá ajudar futuras instalações a não adicionarem lixo para o projeto. Esse é um arquivo que é bom manter no seu controle de versão.
Atualizando o Yarn
Sempre novas versões são lançadas dos packages managers para os melhorar. No caso do Yarn, a forma que temos para atualizar o seu próprio sistema é rodando o comando:
yarn self-update
Se você quiser instalar uma versão específica do gerenciador, então é só utilizar o seguinte:
yarn self-update 0.15.1
Para mais comandos, por favor consulte o site oficial.
O futuro do Yarn
Como o Yarn está sendo apoiado por empresas grandes e de peso, é muito provável que iremos ver novas funcionalidades que ajudam e melhoram o desenvolvimento de software. Não acho impossível em breve termos esse package manager como padrão em novas tecnologias ou mesmo sendo o substituto de antigos gestores de pacotes em tecnologias que usamos hoje. Quem sabe até do Node.js.
De qualquer maneira o projeto é muito bacana e vale a pena ser utilizado para simplificar a vida dos desenvolvedores.
Algo bobo, mas interessante: Usuários do Windows não possuem acesso aos emojis quando instalam as dependências:
Fonte do artigo de referência: Scotch.io
Divirta-se!