Atualizando pacotes NodeJs com segurança e eficiência com npm-check-updates
Tags: node, npm, javascript, tutorial
Published: 2023-02-25 02:07:23

Desenvolvedores costumam atualizar pacotes de aplicativos para resolver problemas de incompatibilidade ou vulnerabilidades. Em um projeto de trabalho recente, encontrei pacotes desatualizados e vulneráveis, então, considerei atualizar tudo. No entanto, descobri que algumas funções, métodos e classes eram incompatíveis com a nova versão dos pacotes (tive uma dor de cabeça maior 😂).

Felizmente, há uma ferramenta chamada **npm-check-updates** que pode ajudar a evitar esses problemas. Neste tutorial, vou ensinar como usar essa ferramenta para atualizar seus pacotes de forma segura e eficiente.

## Versionamento do NPM 🤓
Antes de tudo, é importante entender como funciona o versionamento de pacotes no NPM. O versionamento segue uma convenção de versionamento semântico, que consiste em três números separados por pontos, como **por exemplo "1.2.3"**. Cada número representa um tipo de atualização diferente: **Major, Minor e Patch**.

![Exxemplo de versionamento de pacotes](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0wgkh5gbjzrf78bhrpoz.png)

**A atualização Major** é utilizada quando há mudanças incompatíveis com as versões anteriores do pacote. Essa atualização **pode quebrar a compatibilidade com outras dependências do projeto que usam a versão anterior do pacote**. Geralmente, atualizações major são feitas quando há mudanças significativas na API do pacote ou quando há uma reescrita significativa do código.

**Já a atualização Minor** é utilizada para adicionar novas funcionalidades ou fazer melhorias na funcionalidade existente do pacote, **sem quebrar a compatibilidade com outras dependências**. Geralmente, atualizações minor são feitas quando há uma nova funcionalidade a ser adicionada ou quando há melhorias na implementação existente.

Por fim, a atualização Patch é utilizada para corrigir problemas de segurança ou bugs no pacote, sem adicionar novas funcionalidades ou fazer alterações significativas no código existente. Geralmente, **atualizações patch são feitas quando há problemas de segurança a serem corrigidos ou quando há bugs a serem corrigidos**.

> É importante levar em consideração o tipo de atualização que está sendo feita e suas possíveis consequências ao atualizar um pacote.

## Instalando o pacote globalmente ou usando o npx
Para utilizar o npm check updates (irei chamar de ncu), podemos instalá-lo globalmente abrindo o terminal da sua máquina e rodando o seguinte comando:

`npm i -g npm-check-updates`
![Instalação global do ncu](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/huq3mzryz6ynlf4rt8m0.png)

Com isso, já poderíamos utilizar o pacote. Porém, acabamos instalando uma versão específica do **ncu** (chamaremos assim) em nossa máquina. O problema de instalar dessa maneira é que, caso lancem uma atualização do pacote, nós teremos que atualizá-lo em nossa máquina para usar a versão mais nova e ainda ficamos com um pacote instalado que provavelmente será utilizado poucas vezes.

Por isso, vamos utilizar o **npx**, que é um utilitário que vem junto com o Node.js a partir da versão 5.2.0. Ele é usado para executar pacotes do Node.js sem precisar instalá-los globalmente no sistema operacional ou no projeto em si. Com o npx, você pode executar um pacote Node.js que não está instalado na sua máquina com apenas um comando no terminal:

`npx npm-check-updates`

Dessa forma, o ncu será executado sem precisar ser instalado globalmente em sua máquina, e você sempre terá acesso à versão mais recente do pacote.

## Verificando atualizações disponíveis
Para verificar quais pacotes têm atualizações disponíveis, basta navegar até o diretório do projeto e executar o seguinte comando:

`npx npm-check-updates`

O comando acima exibirá uma lista de todos os pacotes instalados, com suas versões atuais e possíveis atualizações disponíveis.

![Listagem de pacotes instalados](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/otdrvclnhkjrxiurjpdv.png)

## Realizando atualizações
**Atualização de patch**
Começaremos atualizando apenas o patch dos pacotes com o seguinte comando:

`npx ncu -u -t patch`

> A flag -u é uma abreviação de --upgrade, indicando que queremos atualizar os pacotes. A flag -t patch indica que queremos atualizar apenas o patch dos pacotes (e não as versões principais ou secundárias).

O comando acima atualizará todos os pacotes que têm atualizações de patch disponíveis e salvará essas atualizações no arquivo package.json.

![Exemplo de atualização patch](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ao7iqng3cei6i2wrtmvm.png)

Em seguida, para instalar as novas atualizações, basta executar o seguinte comando:

`npm install`

> É recomendado realizar um commit após cada atualização de pacotes. Caso algo dê errado fica mais fácil voltar ao estado anterior.

**Atualização de minor**
Em seguida, podemos atualizar o minor dos pacotes com o comando:

`npx ncu -u -t minor`

O comando acima atualizará todos os pacotes que têm atualizações de minor disponíveis e salvará essas atualizações no arquivo package.json.

![Pacotes atualizados](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/myhj7x9nxuqz0u8lc2uq.png)

Novamente, para instalar as novas atualizações, basta executar o seguinte comando:

`npm install`

**Atualização de major**
Por fim, podemos atualizar o major dos pacotes com o comando:

`npx ncu -u`

## Atualizando pacotes específicos
Se você quiser atualizar apenas pacotes específicos, pode usar a opção `--filter` ou `-f`, por exemplo: `npx ncu -u -t patch -f typeorm`. 

## Entre em contato comigo!
Se você quiser entrar em contato comigo para discutir projetos ou colaborações, pode me encontrar nos seguintes endereços do GitHub:

- Linkedin: https://www.linkedin.com/in/salmomascarenhas/
- Githtub: https://github.com/salmomascarenhas

Sinta-se à vontade para me enviar uma mensagem ou abrir uma issue nos meus repositórios públicos. Estou sempre interessado em conhecer novas pessoas e projetos interessantes!

Espero que essas dicas possam te ajudar em algum momento na sua vida como Dev 😊

Até uma próxima!

## Referências
[Repositório oficial](https://www.npmjs.com/package/npm-check-updates)
[Exemplo em vídeo](https://www.youtube.com/watch?v=0XQXGx3lLaU)