← Voltar ao blogNode.js

Trabalhando com argumentos em Node.js

Artigo do arquivo, publicado em 2020. Ferramentas e informações refletem a época da publicação.

Você já fez aquele programa que executa uma tarefa específica e que funciona perfeitamente, dai de repente surge a necessidade de que esse programa receba um parâmetro ao iniciar? Provavelmente sim, mas caso ainda não tenha passado por isso, vale a pena aprender pois uma hora você irá acontecer.

Vamos supor que ele precise receber um CNPJ no início do programa, por algum motivo do destino, talvez pra buscar os dados em alguma API. O que importa agora pra gente é entender como usar os argumentos.

Naturalmente o Node.js nos permite acessar argumentos no início do programa, então vamos supor que eu deseje passar dois parâmetros, sendo eles cnpj e isActive, eu faria dessa forma:

$ node index 123 true

E lá no código, eu precisaria acessar esses parâmetros da seguinte maneira:

const cnpj = process.argv[2]
const isActive = Boolean(process.argv[3])

Funciona? Sim, funciona. Mas você percebe que tanto a forma de passar esses argumentos quanto a de recebe-los ficou estranha? Talvez não agora, mas no futuro certamente irá ser. Imagine uma outra equipe dando manutenção nesse código dois anos depois.

Pois é, eu passei por isso a um tempo atrás, e por este motivo fiz a lib @pedroentringer/parser-command-line que simplifica muito este processo.

Então vamos instalar esse trem:

$ yarn add @pedroentringer/parser-command-line

Sensacional, feito isso já podemos passar e receber argumento de uma forma muito mais simples. Usando o mesmo exemplo ficaria dessa forma:

$ node index --cnpj=123 -isActive

Melhorou né? Agora veja como faremos pra acessar isso no código:

const parser = require('@pedroentringer/parser-command-line')
const args = parser.parseArgs();

console.log(args)

Repare que tanto a chamada do script quanto sua escrita ficaram muito mais simples né? Eis o resultado disso:

{
  bin: "node",
  commands: ["index"],
  flags: {
    cnpj: 123,
    isActive: true
  }
}

Dessa forma fica muito melhor pra gente usar estes dados não é mesmo? E melhor ainda, você pode usar essa lib na web também, dessa forma é possível fazer o parse de um comando vindo de uma string. Pense que a ordem veio via websocket do backend, ou qualquer outro cenário hehehe.

Usaríamos assim:

const parser = require('@pedroentringer/parser-command-line')
const args = parser.parseString('meuPrograma show --message="Que legal, isso é uma mensagem" --time=100 -isSuccess');

console.log(args)

e o resultado desse parse será:

{
  bin: "meuPrograma",
  commands: ["show"],
  flags: {
    message: "Que legal, isso é uma mensagem",
    time: 100,
    isSuccess: true
  }
}

Super bacana né? E você pode aplicar isso em diversas outras funcionalidades. Aqui não existem limites. hehehe

Divirta-se!

Pedro Entringer

Consultor de tecnologia, desenvolvedor e criador do Meu Rastreio.

Continue explorando.

Meu primeiro aplicativo na Europa

Da identificação de um problema real à construção de um aplicativo em React Native: os aprendizados do meu primeiro projeto em Luxemburgo.

3 min

Automatizando tarefas com o WhatsApp

Uma experiência prática de automação com Node.js e WhatsApp: integração, comandos e tarefas do dia a dia.

10 min
VAMOS TIRAR O PRÓXIMO PASSO DO PAPEL

Seu projeto pode ir mais longe.

Me conte onde você está. Vamos entender o que vem depois.

Conversar sobre meu projeto