Без параметров с помощью commander.js
В настоящее время я смотрю commander.js, так как я хочу реализовать CLI с помощью Node.js.
Использование названных параметров легко, так как пример программы "pizza" показывает:
program
.version('0.0.1')
.option('-p, --peppers', 'Add peppers')
.option('-P, --pineapple', 'Add pineapple')
.option('-b, --bbq', 'Add bbq sauce')
.option('-c, --cheese [type]', 'Add the specified type of cheese [marble]', 'marble')
.parse(process.argv);
Теперь, например, я могу вызвать программу, используя:
$ app -p -b
Но как насчет неназванного параметра? Что, если я хочу называть его с помощью
$ app italian -p -b
? Я думаю, что это не так уж необычно, поэтому предоставление файлов для команды cp
не требует использования именованных параметров. Это просто
$ cp source target
и не:
$ cp -s source -t target
Как достичь этого с помощью commander.js?
И как мне сообщить commander.js, что требуемые параметры не требуются? Например, если вы посмотрите на команду cp
, укажите источник и цель.
Ответы
Ответ 1
Старый вопрос, но так как он еще не ответил...
С настоящей версией командира можно использовать позиционные аргументы. Подробнее см. В docs в синтаксисе аргументов, но с помощью вашего примера cp
это будет примерно так:
program
.version('0.0.1')
.arguments('<source> <target>')
.action(function(source, target) {
// do something with source and target
})
.parse(process.argv);
Эта программа будет жаловаться, если оба аргумента отсутствуют, и дать соответствующее предупреждающее сообщение.
Ответ 2
Вы получаете все неназванные параметры через program.args
. Добавьте в свой пример следующую строку
console.log(' args: %j', program.args);
Когда вы запустите приложение с помощью -p -b -c gouda arg1 arg2
, вы получите
you ordered a pizza with:
- peppers
- bbq
- gouda cheese
args: ["arg1","arg2"]
Тогда вы могли бы написать что-то вроде
copy args[0] to args[1] // just to give an idea