1
resposta

[Dúvida] Uso de Yargs na CLI

Bom dia! Estou tentando aprimorar a CLI usando o Yargs, mas não estou conseguindo ter o resultado esperado.

Tentei fazer da seguinte forma:

let caminho, valida;

yargs.command ({
    command: "ler",
    describe: "Pega o arquivo / pasta onde a busca pelos links deve ser feita",
    builder: {
        caminho: {
            describe: 'Arquivo / pastaa onde a busca deve ser feita',
            demandOption: true,
            type: 'string'
        }
    },
    handler (argv) {
        caminho = argv.caminho;
    }
})

yargs.command ({
    command: "validar",
    describe: "Informa ao programa se deve ou não haver validação da lista de links",
    builder: {
        valida: {
            describe: "Indica true se desejo validar ou false se não desejo",
            demandOption: false,
            type: "boolean"
        }
    },
    handler (argv) {
        valida = argv.valida;
    }
})

Porém, quando tento rodar o programa usando essa forma de passar os argumentos, não funciona, e aparece no console que "yargs.command" não é uma função.

Vocês podem me ajudar?

1 resposta

Oi Gabriela!

Fiz uns testes aqui e pode ser um problema de compatibilidade entre módulos (basicamente entre require e import). Desde que o Node.js passou a aceitar ESM (ou seja, import e export) as bibliotecas vêm se adaptando mas ainda estamos longe de uma implementação "completa".

A partir dessa issue no gh onde está se discutindo o assunto eu testei uma solução que funcionou para o meu teste:

  • instale a lib com npm install yargs (esse passo provavelmente você já fez);
  • crie um arquivo yargs.cjs na pasta do projeto (pode ser na raiz) e dentro dele o seguinte código:
    const argv = require('yargs');
    module.exports = argv;
  • no arquivo .js em que está chamando o yargs, adicione na primeira linha:
    import yargs from './yargs.cjs';

Fiz o teste com o código inicial de teste do yargs, você pode testar no seu código. Vou adicionar um PS no material do curso para avisar deste detalhe.

Espero ter ajudado! Bons estudos ;)

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!