DEV Community

Cover image for Não se preocupe mais com o package manager do seu projeto NodeJS
Marco Ollivier
Marco Ollivier

Posted on • Edited on

Não se preocupe mais com o package manager do seu projeto NodeJS

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

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,pnpme 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
Enter fullscreen mode Exit fullscreen mode

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

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
Enter fullscreen mode Exit fullscreen mode

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

GitHub logo antfu / ni

💡 Use the right package manager

ni

npm i in a yarn project, again? F**k!

ni - use the right package manager


npm i -g @antfu/ni

npm · yarn · pnpm · bun


ni - install

ni
# npm install
# yarn install
# pnpm install
# bun install
Enter fullscreen mode Exit fullscreen mode
ni vite

# npm i vite
# yarn add vite
# pnpm add vite
# bun add vite
Enter fullscreen mode Exit fullscreen mode
ni @types/node -D

# npm i @types/node -D
# yarn add @types/node -D
# pnpm add -D @types/node
# bun add -d @types/node
Enter fullscreen mode Exit fullscreen mode
ni --frozen

# npm ci
# yarn install --frozen-lockfile (Yarn 1)
# yarn install --immutable (Yarn Berry)
# pnpm install --frozen-lockfile
# bun install --no-save
Enter fullscreen mode Exit fullscreen mode
ni -g eslint

# npm i -g eslint
# yarn global add eslint (Yarn 1)
# pnpm add -g eslint
# bun add -g eslint

# this uses default agent, regardless your current working directory
Enter fullscreen mode Exit fullscreen mode

nr - run

nr dev --port=3000
Enter fullscreen mode Exit fullscreen mode

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.

Top comments (0)