Преобразовать строку команды в массив аргументов (NodeJS)

Есть строка:

$testcmd some args and "string args" --exparam 50 -p -m -o "123456"

Её необходимо преобразовать в что-то подобное

{
  cmd: 'testcmd',
  args: ['some','args','and','string args'],
  parameters:{
    exparam: 50,
    p: true,
    m: true,
    o: '123456'
  }
}

Как это сделать с помощью NodeJS


Ответы (1 шт):

Автор решения: vsemozhebuty

Вы можете попробовать изобрести велосипед, что-то вроде такого:

const options = { args: [], parameters: {} };

options.cmd = `${process.argv[0]} ${process.argv[1]}`;

let i = 2;

while (i < process.argv.length) {
  let option = process.argv[i];

  if (option.startsWith('-')) {
    option = option.replace(/^-{1,2}/, '');

    if (process.argv[i + 1].startsWith('-')) {
      options.parameters[option] = true;
    } else {
      options.parameters[option] = process.argv[++i];
    }
  } else {
    options.args.push(option);
  }

  i++;
}

console.log(options);

Но лучше воспользоваться готовыми библиотеками, как вам посоветовали, которые давно отлажены и учитывают много разных сложных моментов:

https://www.npmjs.com/package/commander

https://www.npmjs.com/package/yargs

https://www.npmjs.com/package/meow

Ну и так далее, поиском по ключевым словам на npmjs.com, пока не найдёте то, что вам понравится.

→ Ссылка