Não se preocupe mais com o package manager do seu projeto NodeJS
Tags: node, yarn, npm, pnpm
Published: 2023-07-06 23:25:07

Eu que venho de outras tecnologias como Go, Clojure e Java, as vezes fico um pouco irritado com a quantidade de alternativas que são usadas de maneira tão ampla no universo NodeJS. Pra esse post específico eu ilustro com gerenciadores de pacote... meu deus... é npm, é yarn, é pnpm. 
Parece que cada dia aparece um novo. 

(tá... não é pra tanto, mas eu quero fazer um drama pra justificar o post)

Mas fazendo aqui um mea-culpa, talvez isso seja um problema mais meu do que da tecnologia em si, já que até hoje minha memória muscular digita no terminal `lein lint:fix` em vez de `yarn lint:fix` ou qualquer outro comando que realmente funcione pra projetos Node. 

(pra quem não entendeu, lein é de Leiningen, o gerador de pacotes que eu usava pra trabalhar com Clojure) 

Mas meus problemas acabaram. Esses dias scrollando alguma rede social por aí, chegou ao meu conhecimento o `ni`. Mas o que seria o Ni? Um novo gerador de pacotes? Não, mas ele vai acabar de vez com meus problemas em relação a projetos diferentes com gerenciadores diferentes. 

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1zv1c8t8qpomcfbv1itv.png)

# O Ni

É tão simples usar o Ni, que escrever sobre ele também não demanda um texto muito grande. 

Basicamente é uma ferramenta desenvolvida pra você que tem vários projetos e, eventualmente, cada um com um package manager. O Ni simplesmente vai abstrair isso pra você e você pode passar a se preocupar apenas com um único padrão de comandos.

O `Ni` dá suporte a `npm`, `yarn`,`pnpm`e `bun` e com apenas um conjunto de comandos você trabalha com qualquer projeto que use um desses. 

Por exemplo: se eu quero adicionar um novo pacote no meu projeto Node, mas apenas no contexto de desenvolvimento, pra cada um dos geradores de pacotes acima, eu teria essas opções abaixo: 

```
# npm i @types/node -D
# yarn add @types/node -D
# pnpm add -D @types/node
# bun add -d @types/node
```
Se você tem o Ni configurado na sua máquina, basta executar o comando `ni @types/node -D` e ele vai identificar qual o gerenciador de pacotes você tá usando e encontrar qual desses comandos ele deveria executar por debaixo dos panos. 

Só por isso o Ni já se justifica pra mim, mas além disso, ele também é uma CLI bem interativa. O que pra mim é muito interessante quando estou tentando executar um projeto que eu ainda não conheço muito bem. 

Por exemplo: pra eu rodar algum comando que está configurado dentro do meu `package.json` basta eu rodar `nr` (ni run) e ele vai listar pra mim todos os comandos de scripts disponíveis nos `scripts` do arquivo em um menu navegável pra ajudar na execução. 

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/05psonvrjndhqwwbnu4i.gif)

O Ni também tenta te ajudar na repetição de comandos. Se você executar o comando `nr -` ele vai executar o último comando rodado. No caso, se eu rodei um `nr start:dev`, na vez seguinte eu posso apenas executar o `nr -` que ele vai executar o start:dev pra mim. 

E aqui se eu não te convenci, não sei mais como posso fazer isso, mas se curtiu, instalar também é absurdamente simples. Basta apenas executar o comando 

```
$ npm i -g @antfu/ni
```

E se quiser olhar como o projeto foi construído e até mesmo colaborar com o projeto, o Github é esse aqui. 

{% embed https://github.com/antfu/ni %}

# Conclusão

Pra pessoas como eu que trabalho em várias frentes - trabalho, voluntariado, comunidade etc - ter uma ferramenta que me ajuda em coisas pequenas que não deveriam tomar mais do que alguns poucos segundos faz muita diferença e por isso eu curti tanto a proposta do Ni. Espero que, de alguma forma, esse post também ajude você a ganhar um pouquinho mais de produtividade.