В этом коротком сообщении в блоге мы увидим, как мы можем написать сценарий Node.js, который принимает аргументы командной строки и именованные аргументы.

Как мы знаем, в любом скрипте Node.js у нас есть объект с именем process, который содержит много информации о текущем запущенном процессе от переменных среды до PID и т. д.

Одним из доступных ключей в объекте process является argv, и мы можем легко получить к нему доступ через process.argv.

Два первых элемента — это путь к исполняемому файлу Node.js и путь к файлу JavaScript, за которыми следуют предоставленные аргументы командной строки, если только вы не запустите их в интерактивной оболочке Node.js.

// From script file named main.js
console.log(process.argv)
[ '/usr/bin/node', '/home/mmoallemi/main.js' ]

// From interactive node
❯ node
Welcome to Node.js v15.14.0.
Type ".help" for more information.
> process.argv
[ '/usr/bin/node' ]

Вместо этого мы должны использовать process.argv.slice(2):

node main.js first second third

~ 
❯ node main.js  first second third
[
  'first',
  'second',
  'third'
]

Здорово! До сих пор мы добились передачи позиционных аргументов в наш сценарий, но если мы хотим использовать именованные аргументы или какие-то флаги?

node main.js extract --input=test.txt --output=results.txt
[
  'extract',
  '--input=test.txt',
  '--output=results.txt'
]

Мы передали один позиционный аргумент и два именованных аргумента, мы можем продолжить и очистить значения и разделить их на = и тому подобное, но давайте сделаем это правильно.

Установите minimist с помощью вашего любимого менеджера пакетов, я использую пряжу:

yarn add minimist

а затем передать аргументы minimist для его анализа:

// node main.js extract --input=test.txt --output=results.txt
// main.js script
const minimist = require('minimist')

const args = process.argv.slice(2)

const parsedArgs = minimist(args)

console.log('Parsed Arguments:', parsedArgs)

console.log('Input:', parsedArgs.input)
console.log('Output:', parsedArgs.output)

console.table(parsedArgs)

Наслаждайтесь результатами!

Parsed Arguments: { _: [ 'extract' ], input: 'test.txt', output: 'results.txt' }

Input: test.txt
Output: results.txt

┌─────────┬───────────┬───────────────┐
│ (index) │     ۰     │    Values     │
├─────────┼───────────┼───────────────┤
│    _    │ 'extract' │               │
│  input  │           │  'test.txt'   │
│ output  │           │ 'results.txt' │
└─────────┴───────────┴───────────────┘

Удачного написания сценариев!

Первоначально опубликовано на https://mmoallemi99.com 2 мая 2021 г.