инструменты cli доступны везде,
Например, vue-cli:
Среди них модуль командира используется для разбора параметров.Чтобы понять, что делает инструмент, особенно важно понимать командира!
принцип:
Когда программа Nodejs запускается,process
Один из объектов называетсяargv
характеристики.命令行程序的第一个重头戏就是解析这个process.argv
Атрибуты.
Определите сценарий приветствия и напечатайте process.argv.
#!/usr/bin/env node
console.log('hello ', process.argv);
在终端输入$ hello a b c
выглядитprocess.argv
Кажется, это массив, где первый элемент — путь выполнения узла, второй элемент — путь текущего исполняемого файла, начиная с третьего элемента, — параметр, вносимый во время выполнения.
Конечно, вы можете самостоятельно проанализировать параметр argv.
используя командующий.js
commander.jsдаTJИнструментарий, написанный для упрощения создания программ командной строки узла.
установка и использование
Установка проста,
$ npm install commander
// file: ./bisheng
#!/usr/bin/env node
const program = require('commander');
const package = require('../package.json');
program
.version(package.version)
.option('-f, --foo', 'enable some foo')
.option('-b, --bar', 'enable some bar')
.option('-B, --baz', 'enable some baz');
program.on('--help', function(){
console.log('');
console.log('Examples:');
console.log(' $ custom-help --help');
console.log(' $ custom-help -h');
});
program.parse(process.argv);
命令来执行它$ ./bisheng -h
Первым преимуществом command.js является то, что он предоставляет краткий API для разбора опций и параметров. Второе преимущество — автоматическая генерация справочных текстовых сообщений.
Общие API
version
- Номер версии первого параметра
- Пользовательский флаг второго параметра : по умолчанию -V и --version
когда мы входим./bisheng -v или./bisheng --version может вывести соответствующий номер версии
option
Роль: используется для определения параметров команды:.option('-n, --name <name>', 'your name', 'GK')
- Первый параметр Custom logo
: разделить на длинные и короткие логотипы, разделенные запятыми, вертикальными чертами или пробелами; . - За флагом могут следовать параметры, которые можно изменить с помощью или [], первое означает обязательные параметры, последнее означает необязательные параметры.
- За флагом могут следовать параметры, которые можно изменить с помощью или [], первое означает обязательные параметры, последнее означает необязательные параметры.
- Описание опции второго параметра : отображать описание флага при использовании команды --help
- Третий параметр Option значение параметра по умолчанию, необязательный.
Выполните команду $ ./bisheng --name 123
program.name值为123 不输入123则取默认值GK
command
Роль: добавить имя команды Пример использования: .command('rmdir[otherDirs...]', 'install description', opts)
Разбор параметров:
- Первый параметр Имя команды : За командой могут следовать параметры, заключенные в или []; последний параметр команды может быть переменной, а флаг otherDirs... добавляется после массива, как в примере ; параметры, переданные после команды, будут переданы функции обратного вызова действия и массиву program.args
- Второй параметр Описание команды : Если он существует, а действие(fn) не отображается, будет запущена подкомандная программа, иначе будет сообщено об ошибке
-
Когда второго параметра нет, command.js вернет
Command
Object, если есть второй параметр, будет возвращен объект-прототип. -
При вызове со вторым параметром и без отображения
action(fn)
, будет использоваться режим подкоманды. -
Так называемый режим подкоманды,
./pm
,./pm-install
,./pm-search
Ждать. Эти подкоманды находятся в отдельных файлах от основной команды.
- alias
Роль: использование пользовательского псевдонима .alias('ex')
- description
Роль: определите описание команды Пример использования: .description('rmdir desc')
- action
Применение:.action(fn)
Используется для установки соответствующего обратного вызова для выполнения команды.fn
Параметры, которые могут принимать команды, являются функциональными параметрами в том же порядке, что иcommand()
определяются в том же порядке.
parse
Применение:program.parse(process.argv)
Это апи вообще последний звонок для парсингаprocess.argv
.
outputHelp
Применение:program.outputHelp()
Обычно используется для автоматической печати справочной информации, когда параметры не введены.
разбор параметров
.option()
Методы используются для определения командира с параметрами, а также служат документацией для этих параметров. Следующий пример будет анализировать изprocess.argv
Указанные параметры и опции, параметры, не соответствующие ни одной из опций, будут помещены вprogram.args
в массиве.
#!/usr/bin/env node
var program = require('commander');
program
.version('0.0.1')
.option('-p, --peppers', 'Add peppers')
.option('-P, --pineapple', 'Add pineapple')
.option('-b, --bbq-sauce', 'Add bbq sauce')
.option('-c, --cheese [type]', 'Add the specified type of cheese [marble]', 'marble')
.parse(process.argv);
console.log('you ordered a pizza with:');
if (program.peppers) console.log(' - peppers');
if (program.pineapple) console.log(' - pineapple');
if (program.bbqSauce) console.log(' - bbq');
console.log(' - %s cheese', program.cheese);
Выполните команду $ ./bisheng -p или ./bisheng --peppers
program.peppers的值为true
Выполните команду $ ./bisheng -c 123
program.cheese值为123 默认值为marble
Добавить функцию-обработчик
#!/usr/bin/env node
var program = require('commander');
function range(val) {
return val.split('..').map(Number);
}
function list(val) {
return val.split(',');
}
function collect(val, memo) {
memo.push(val);
return memo;
}
function increaseVerbosity(v, total) {
return total + 1;
}
program
.version('0.0.1')
.usage('[options] <file ...>')
.option('-i, --integer <n>', 'An integer argument', parseInt)
.option('-f, --float <n>', 'A float argument', parseFloat)
.option('-r, --range <a>..<b>', 'A range', range)
.option('-l, --list <items>', 'A list', list)
.option('-o, --optional [value]', 'An optional value')
.option('-c, --collect [value]', 'A repeatable value', collect, [])
.option('-v, --verbose', 'A value that can be increased', increaseVerbosity, 0)
.parse(process.argv);
console.log(' int: %j', program.integer);
console.log(' float: %j', program.float);
console.log(' optional: %j', program.optional);
program.range = program.range || [];
console.log(' range: %j..%j', program.range[0], program.range[1]);
console.log(' list: %j', program.list);
console.log(' collect: %j', program.collect);
console.log(' verbosity: %j', program.verbose);
console.log(' args: %j', program.args);
регулярное выражение
program
.version('0.0.1')
.option('-s --size <size>', 'Pizza size', /^(large|medium|small)$/i, 'medium')
.option('-d --drink [drink]', 'Drink', /^(coke|pepsi|izze)$/i)
.parse(process.argv);
console.log(' size: %j', program.size);
console.log(' drink: %j', program.drink);
переменный параметр
Последний параметр команды может быть переменным, и только последний параметр может быть переменным. Чтобы сделать параметр переменным, вам нужно добавить имя параметра...
. Вот пример:
#!/usr/bin/env node
var program = require('commander');
program
.version('0.0.1')
.command('rmdir <dir> [otherDirs...]')
.action(function (dir, otherDirs) {
console.log('rmdir %s', dir);
if (otherDirs) {
otherDirs.forEach(function (oDir) {
console.log('rmdir %s', oDir);
});
}
});
program.parse(process.argv);
rmdir <dir> [otherDirs...]
dir 接受参数dir otherDirs为一个数组接受后面所有的参数(可变参数)
Синтаксис для указания параметров
угловые скобки (например,<cmd>
) представляет требуемый ввод, квадратные скобки (например,[env]
) представляет необязательный ввод.
#!/usr/bin/env node
var program = require('commander');
program
.version('0.0.1')
.arguments('<cmd> [env]')
.action(function (cmd, env) {
cmdValue = cmd;
envValue = env;
});
program.parse(process.argv);
if (typeof cmdValue === 'undefined') {
console.error('no command given!');
process.exit(1);
}
console.log('command:', cmdValue);
console.log('environment:', envValue || "no environment given");
Подкоманды в стиле Git
// file: ./bin/bisheng
#!/usr/bin/env node
const program = require('commander');
const package = require('../package.json');
program .version(package.version)
.usage('[command] [options]')
.command('start [options]', 'to start a server')
.command('build [options]', 'to build and write static files to `config.output`')
.command('gh-pages [options]', 'to deploy website to gh-pages',{isDefault: true})
.parse(process.argv);
когда.command()
С параметром описания его нельзя использовать.action(callback)
для обработки подкоманды, иначе произойдет ошибка. Это сообщает командиру, что вы собираетесь взять отдельный исполняемый файл в качестве подкоманды.
Командир попытается выполнить сценарий входа (например,./bin/bisheng
) для поиска в каталогеprogram-command
исполняемый в видеbisheng-start
, bisheng-build,bisheng-gh-pages
.
следующим образом:
вы можете позвонить.command()
при передаче опций. уточнитьopts.noHelp
дляtrue
Эта опция будет удалена из сгенерированного вывода справки. уточнитьopts.isDefault
дляtrue
Эта подкоманда будет выполнена, если никакая другая подкоманда не указана.
Автоматизировать справочные сообщения --help
Справочная информация автоматически генерируется командиром на основе вашей программы.--help
Сгенерированная справочная информация:
пользовательская справка
вы можете следить--help
Контроль-h, --help
Отображение любой информации. После завершения вызова Commander автоматически закроется, и остальная часть вашей программы не будет отображаться. Например, в следующем «веще» не будет выполняться--help
вывод времени.
#!/usr/bin/env node
var program = require('commander');
program
.version('0.0.1')
.option('-f, --foo', 'enable some foo')
.option('-b, --bar', 'enable some bar')
.option('-B, --baz', 'enable some baz');
program.on('--help', function(){
console.log('');
console.log('Examples:');
console.log(' $ custom-help --help');
console.log(' $ custom-help -h');
});
program.parse(process.argv);
console.log('stuff');
.outputHelp(cb)
Не выходите для вывода справочной информации. Необязательный обратный вызов для обработки после отображения текста справки. Если вы хотите отобразить справку по умолчанию (например, если команда не указана), вы можете использовать что-то вроде:
var program = require('commander');
var colors = require('colors');
program
.version('0.0.1')
.command('getstream [url]', 'get stream URL')
.parse(process.argv);
if (!process.argv.slice(2).length) {
program.outputHelp(make_red);
}
function make_red(txt) {
return colors.red(txt); // 在控制台上显示红色的帮助文本
}