Criação de ferramentas CLI em Node.js: visão geral dos frameworks Commander, Yargs e Inquirer

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Framework CLI para JavaScript (Node.js): criando aplicações de console poderosas



O desenvolvimento de utilitários de console (CLI) é uma das tarefas principais no ecossistema Node.js. Seja para automação de build, gerenciamento de pacotes, geração de código ou scripts simples para DevOps — não se pode prescindir de um framework CLI de qualidade. Neste artigo, analisaremos as três ferramentas mais populares: Commander, Yargs e Inquirer. Você aprenderá como elas funcionam, quais são seus pontos fortes e verá exemplos de código.



Para que serve um framework CLI?

É possível escrever um programa de console simples sem um framework — basta processar process.argv. Mas, à medida que o projeto cresce, surgem subcomandos, flags, dicas interativas — e o parsing manual de argumentos se torna um pesadelo. Os frameworks assumem:

  • parsing de argumentos e opções;
  • geração de ajuda (--help);
  • validação de dados de entrada;
  • suporte a subcomandos (como no git);
  • diálogos interativos com o usuário.


Commander — clássico e padrão

Commander é o framework CLI mais popular para Node.js. É usado por gigantes como Vue CLI, NestJS e muitos outros. Principais recursos: API intuitiva, exibição automática de ajuda, suporte a argumentos variados.



Exemplo de aplicação simples:

#!/usr/bin/env nodeconst { Command } = require('commander');const program = new Command();

program .name('greet') .description('Saudação ao usuário') .version('1.0.0');

program .command('hello') .argument('<name>', 'Nome do usuário') .option('-l, --lang <language>', 'Idioma da saudação', 'pt') .action((name, options) => { if (options.lang === 'pt') { console.log(`Olá, ${name}!`); } else { console.log(`Hello, ${name}!`); } });

program.parse();


Execução: node app.js hello João --lang pt → Olá, João!



Commander gera automaticamente a ajuda com --help e suporta encadeamento de chamadas. É a escolha ideal para a maioria dos utilitários CLI.



Yargs — flexibilidade e praticidade

Yargs é outro framework poderoso, especialmente forte no parsing de opções complexas e na determinação automática de tipos. É popular entre desenvolvedores que precisam de controle refinado sobre os argumentos.



Exemplo com Yargs:

#!/usr/bin/env nodeconst yargs = require('yargs/yargs');const { hideBin } = require('yargs/helpers');

const argv = yargs(hideBin(process.argv)) .command('calc', 'Calculadora', (yargs) => { return yargs .option('a', { describe: 'Primeiro número', type: 'number', demandOption: true }) .option('b', { describe: 'Segundo número', type: 'number', demandOption: true }) .option('op', { describe: 'Operação (sum, sub)', type: 'string', default: 'sum' }); }, (argv) => { const { a, b, op } = argv; if (op === 'sum') console.log(`Soma: ${a + b}`); else if (op === 'sub') console.log(`Diferença: ${a - b}`); else console.log('Operação desconhecida'); }) .demandCommand(1, 'Informe um comando') .help() .argv;


Yargs converte automaticamente strings em números, valores booleanos e até arrays. Seu poderoso sistema de middleware permite adicionar verificações comuns para todos os comandos.



Inquirer — interatividade no terminal

Inquirer não é exatamente um framework CLI, mas sim uma biblioteca para criar interfaces de console interativas. Ela complementa perfeitamente o Commander ou Yargs quando são necessárias perguntas com opções, entrada de texto, checkboxes.



Exemplo de pesquisa interativa:

const inquirer = require('inquirer');

async function main() { const answers = await inquirer.prompt([ { type: 'inp

Recommendations