process.argv
Процесс — это модуль в узле. Получив доступ к process.argv, мы можем легко и с удовольствием получить параметры, переданные при выполнении программы узла через команду.
[info] argv в переводе на китайский означает: массив аргументов командной строки.
Что это значит? Мы все использовали его в окне командной строкиnpm
команда для загрузки пакета.При использовании команды npm мы также можем передать некоторые параметры, такие как имя загружаемого пакета, независимо от того, является ли он зависимостью разработки или производственной зависимостью.
этипереданные параметры+Абсолютный путь node.exe+Абсолютный путь к файлу, исполняемому узломСформированный массив =process.argv
. Он не только содержит переданные параметры, но также содержит две другие вещи в качестве членов массива, поэтому он называетсяАргументмножество.
Пример 1
// 文件p1.js中
console.log(process.argv);
>>>命令行中输入
node p1.js --a -b c
<<< 输出
E:\w>node p1.js --a -b c
[ 'C:\\Program Files\\nodejs\\node.exe',
'E:\\w\\p1.js',
'--a',
'-b',
'c' ]
командный файл
Пакетные файлы, как следует из названия, могут достичь эффекта выполнения нескольких команд узла за счет выполнения только одного файла, что может значительно упростить ввод данных в командной строке.Просто введите имя пакетного файла, даже неnode
этот префикс.
Пакетные файлы различаются в разных операционных системах, в основном делятся на:
- пакетный файл под окном
- батник под линукс
командный файл в виндовс
Суффикс пакетного файла в Windows называется.bat
.
//hello.bat文件中
node p.js -a hello -b world
>>>命令行中
hello //为xx.bat文件去掉后缀的文件名
<<<输出
[ 'C:\\Program Files\\nodejs\\node.exe',
'E:\\w\\p1.js',
'-a',
'hello',
'-b',
'world' ]
Заполнитель
В приведенных выше каштанах есть проблема.Параметры, которые мы передаем, являются фиксированными.Если они не являются фиксированными, нам нужно заменить исходные фиксированные параметры на плейсхолдеры в .bat файле, а затем передать параметры при выполнении батника. параметры для отображения.
//hello.bat文件中
node p.js %1 %2 %3 %4
>>>命令行中输入
hello -a hello -b world //为xx.bat文件去掉后缀的文件名
<<<输出
[ 'C:\\Program Files\\nodejs\\node.exe',
'E:\\w\\p1.js',
'-a',
'hello',
'-b',
'world' ]
[warning] Уведомление:
- В настоящее время число после % представляет
%x
Этот заполнитель представляет количество входящих параметров - %x начинается с %1 вместо %0
Хотя приведенные выше значения параметров больше не фиксированы, число по-прежнему фиксировано, поэтому мы рекомендуем следующие linux-подобные пакетные файлы.
пакетный файл в стиле linx
На данный момент нам больше не нужно.bat
Имя суффикса, имя нашего пакетного файла напрямуюxxx
(Суффикс больше не требуется).
Добавить исполняемое разрешение на файл
Если файл, который мы хотим выполнить, называется hello, чтобы выполнить этот пакетный файл, нам нужно сначала добавить к нему права на выполнение.
$ chmod +x hello
Укажите командной строке, кто должен выполнить содержимое этого файла
Затем добавьте в этот файл предложение, означающее, что узел может выполнить эту команду.
#! /usr/bin/env node
'./'запускаемый файл
Наконец, как выполнить этот файл, просто нужно получить к нему доступ
>>>输入
$ ./hello --a -b c
<<< 输出
[ 'C:\\Program Files\\nodejs\\node.exe',
'E:\\w\\hello',
'--a',
'-b',
'c' ]
[danger] Уведомление:В настоящее время./
Это необходимо
npm link
Если мы хотим ввести команду без ввода предыдущего './', нам нужно использоватьnpm link
.
Во-первых, под package.json добавьте такой абзац
"bin":{
"hello":"hello" //前者为我们输入的命令,后者为要执行的文件的路径(包括文件名)
}
Затем введите командную строку в каталог, где находится package.json
npm link
Таким образом, нам не нужно добавлять./
приставка.
[important]Уведомление:
-
Это связано с тем, что после ссылки npm команда в командной строке указывает на bat-файл каталога npm (после npm-link он будет автоматически сгенерирован в каталоге npm, и его роль — связать исполняемый файл, который мы настроили в package. json в этот .bat), а bat-файл указывает на файл hello (путь) в текущем каталоге (каталог, в котором находится package.json).
-
npm link должны сотрудничать#!/usr/bin/env узел, иначе Windows сообщит об ошибке выполнения скрипта
yargs
yargs может помочь нам обернуть параметры, которые мы принимаем, в исполняемый файл.yargs.argv — это упакованный файл process.argv., кроме того, мы можем дополнительно настроить этот объект-оболочку через yargs.options.
[important] Уведомление:Большое отличие от process.argv заключается в том, что он возвращает объект вместо массива слиния соединения -
или--
В качестве значения ключа в объекте будет использоваться параметр в начале, а в качестве значения ключа будет использоваться параметр в начале строки без переноса после него. строка без переноса, она будет возвращена.true
//hello文件中
#! /usr/bin/env node
let yargs = require('yargs');
let argv = yargs.argv; //.argv是必须的
console.log(argv);
>>>命令行中输入
$ ./hello --a 1 -b 2 c
<<<输出
{ _: [ 'c' ],
help: false,
version: false,
a: 1,
b: 2,
'$0': 'hello',}
console.log(argv.a);
<<<输出
1
атрибут подчеркивания
мы можем получить доступargv._
чтобы получить параметры, начинающиеся со строки без дефиса
>>>命令行中输入
$ ./hello d --a 1 -b 2 c
<<<输出
[ 'd', 'c' ]
Настройка параметров командной строки
Конфигурация нескольких различных параметров передается через.option
разделенный
#! /usr/bin/env node
let yargs = require('yargs');
// let argv = yargs.argv;
let argv = yargs.options('a',{
alias:'ant'
,demand:true
,default:'super'
,describe:'一只灰常大的蚂蚁'
,boolean:false
,type:'string'
}).options('b',{
alias:'BB'
,describe:'woshi bb'
,boolean:false
}).argv;
console.log(argv._);
console.log(argv);
>>>命令行中输入
$ ./p1.js -a valueA -b valueB -c
<<<输出
[]
{ _: [],
help: false,
version: false,
a: 'valueA',
ant: 'valueA',
b: 'valueB',
BB: 'valueB',
c: true,
'$0': 'p1.js' }
Описание элемента конфигурации:
- псевдоним: псевдоним, при передаче a также будет сгенерирован ant
- спрос: должен ли параметр быть
- по умолчанию: значение по умолчанию
- описать: описание параметра
- boolean: если установлено значение true, если параметр не передается, значение параметра будет установлено на false
- type: ограничить тип входящих параметров
Справочная информация по конфигурации
Во-первых, yargs предоставил нам по умолчанию--help
Параметры для отображения справочной информации, мы также можем настроить псевдоним для этого параметра --help, чтобы упростить
let argv = yargs.此处省略一万字.help('h').argv
>>>命令行中输入
$ ./p1.js --h
<<<输出
选项:
--version 显示版本号 [布尔]
-a, --ant 一只灰常大的蚂蚁 [字符串] [必需] [默认值: "super"]
-b, --BB woshi bb [布尔]
-h 显示帮助信息 [布尔]
Настройка дополнительных подсказок справки
- использование: формат использования
- пример: подробное использование каштанов
- эпилог: отображать в конце, часто используется для отображения строки версии командного инструмента
// hello文件中
...
.help('h')
.usage('hello -[option] value')
.example('我,栗子,让你明白!')
.epilog('copyright 2018-')
.argv;
>>>
$ ./hello -h
<<<
hello -[option] value
选项:
--version 显示版本号 [布尔]
-a, --ant 一只灰常大的蚂蚁 [字符串] [必需] [默认值: "super"]
-b, --BB woshi bb [布尔]
-h 显示帮助信息 [布尔]
示例:
我,栗子,让你明白!
copyright 2018-
идеи реализации yargs
let args = process.argv;
let argv = {};
for(let i=2;i<args.length;++i){
let cur = args[i];
if(/^(--)/.test(cur)){
argv[cur.slice(2)] = args[++i];
}
}