Voltar ao Diminua Blog

Artigo

Simplificando a Gestão de Dependências em Projetos Pequenos com `npm` e `yarn`

Um guia prático para gerenciar pacotes e manter seus projetos JavaScript organizados e atualizados.

Simplificando a Gestão de Dependências em Projetos Pequenos com `npm` e `yarn`

Introdução à Gestão de Dependências

Em projetos de desenvolvimento de software, especialmente aqueles de menor escala, a gestão eficiente das dependências é um pilar fundamental para a estabilidade, manutenibilidade e produtividade. Dependências são bibliotecas ou pacotes de código que seu projeto utiliza para realizar determinadas funcionalidades. Gerenciá-las corretamente evita conflitos, garante que todos os desenvolvedores usem as mesmas versões e facilita a implantação.

Para o ecossistema JavaScript, especialmente com Node.js, duas ferramentas se destacam nesse papel: npm (Node Package Manager) e yarn. Ambas cumprem a função de instalar, atualizar e remover pacotes, mas possuem filosofias e implementações ligeiramente diferentes. Este artigo explora como utilizar essas ferramentas de forma eficaz em pequenos projetos.

O que são `npm` e `yarn`?

npm é o gerenciador de pacotes padrão que vem instalado com o Node.js. Ele permite que desenvolvedores descubram, instalem, compartilhem e gerenciem dependências de código. O npm utiliza um arquivo chamado package.json para registrar as dependências do projeto, suas versões e outros metadados importantes.

yarn, desenvolvido pelo Facebook, surgiu como uma alternativa ao npm, visando resolver alguns problemas de performance e consistência na instalação de pacotes. Ele também utiliza o package.json e oferece funcionalidades semelhantes, mas com otimizações em cache e paralelismo que podem resultar em instalações mais rápidas.

Instalando e Gerenciando Dependências com `npm`

Para começar a usar o npm, você precisa ter o Node.js instalado. Após instalar o Node.js, o npm estará disponível em seu terminal.

Inicializando um projeto

Para criar um arquivo package.json para o seu projeto, navegue até a pasta raiz do projeto no terminal e execute:

npm init -y

O comando npm init inicia um assistente interativo para criar o package.json. A flag -y (ou --yes) aceita todas as configurações padrão, o que é útil para iniciar rapidamente um projeto pequeno.

Instalando pacotes

Para instalar uma dependência, use o comando install:

npm install nome-do-pacote

Este comando instala o pacote especificado e o adiciona à seção dependencies no seu package.json. Para instalar dependências de desenvolvimento (como ferramentas de build ou testes), use a flag --save-dev:

npm install nome-do-pacote-dev --save-dev

Atualizando pacotes

Para atualizar todos os pacotes para as versões mais recentes permitidas pelas especificações no package.json:

npm update

Removendo pacotes

Para remover uma dependência instalada:

npm uninstall nome-do-pacote

Instalando e Gerenciando Dependências com `yarn`

Se você optar por usar yarn, precisará instalá-lo globalmente primeiro:

npm install -g yarn

Ou, se preferir instalar o yarn como uma dependência de desenvolvimento do projeto:

npm install --save-dev yarn

Inicializando um projeto com `yarn`

Para criar um arquivo package.json e um arquivo de lock (yarn.lock) para o seu projeto, execute:

yarn init -y

Instalando pacotes com `yarn`

A instalação de pacotes é feita com o comando add:

yarn add nome-do-pacote

Para dependências de desenvolvimento:

yarn add nome-do-pacote --dev

Atualizando pacotes com `yarn`

O yarn gerencia atualizações de forma um pouco diferente. Para atualizar todas as dependências para as versões mais recentes compatíveis:

yarn upgrade

Removendo pacotes com `yarn`

Para remover uma dependência:

yarn remove nome-do-pacote

Entendendo os Arquivos `package.json` e `package-lock.json` / `yarn.lock`

O arquivo package.json é o coração da gestão de dependências. Ele contém:

  • name e version: Nome e versão do seu projeto.
  • dependencies: Pacotes necessários para a execução do seu código em produção.
  • devDependencies: Pacotes necessários apenas para o desenvolvimento (testes, build, etc.).
  • scripts: Comandos customizados para automatizar tarefas (como `npm start`, `yarn test`).

Os arquivos package-lock.json (gerado pelo npm) e yarn.lock (gerado pelo yarn) são cruciais para garantir a reprodutibilidade das instalações. Eles registram as versões exatas de cada dependência instalada, incluindo as dependências de dependências (chamadas de sub-dependências). Isso garante que, ao instalar o projeto em outra máquina ou em um ambiente de produção, as mesmas versões exatas dos pacotes sejam utilizadas, evitando surpresas e bugs causados por incompatibilidades entre versões.

Aviso de Segurança: Sempre inclua os arquivos package-lock.json ou yarn.lock no seu controle de versão (Git). Nunca use npm install ou yarn install sem que esses arquivos existam e estejam atualizados, a menos que sua intenção seja explicitamente atualizar dependências ou redefinir o estado do projeto.

Scripts de Automação no `package.json`

A seção scripts no package.json é uma forma poderosa de automatizar tarefas comuns do seu projeto. Você pode definir comandos que serão executados usando npm run ou yarn .

Exemplos comuns:

  • "start": "node index.js": Para iniciar sua aplicação.
  • "test": "jest": Para executar testes com o Jest.
  • "build": "webpack": Para compilar seu código frontend.

Utilizar scripts padroniza a execução de tarefas e facilita para novos membros da equipe entenderem como operar o projeto.

Escolhendo entre `npm` e `yarn`

Para pequenos projetos, a escolha entre npm e yarn raramente fará uma diferença drástica em termos de funcionalidade. Ambos são excelentes ferramentas.

Historicamente, yarn era mais rápido e oferecia maior consistência. No entanto, as versões mais recentes do npm (a partir da v5) implementaram melhorias significativas em performance e no mecanismo de lock file, tornando a diferença menos pronunciada.

Recomendação para pequenos projetos:

  • Se você já tem o Node.js instalado, o npm é a escolha mais direta, pois já vem incluído.
  • Se você trabalha em equipe e quer garantir a máxima consistência de ambiente, ou se o seu projeto envolve um número muito grande de dependências onde a performance de instalação é crítica, o yarn pode ser uma excelente opção.

O importante é ser consistente dentro de um mesmo projeto e garantir que o arquivo de lock (package-lock.json ou yarn.lock) seja versionado.

Conclusão

Dominar a gestão de dependências com npm ou yarn é essencial para qualquer desenvolvedor, independentemente do tamanho do projeto. Essas ferramentas não apenas simplificam a instalação e o gerenciamento de pacotes, mas também garantem a reprodutibilidade e a estabilidade do ambiente de desenvolvimento e produção. Ao entender e utilizar corretamente os arquivos package.json e os arquivos de lock, você constrói uma base sólida para projetos mais organizados, fáceis de manter e com menos surpresas.

Foto de Rafael Minguet Delgado no Pexels.