Получи случайную криптовалюту за регистрацию!

util.parseArgs() Вот уже 3 года тянется дискуссия на тему ста | Валя читает ишью

util.parseArgs()

Вот уже 3 года тянется дискуссия на тему стандартного способа парсить CLI аргументы в Node.js.

Внутри скриптов нам хочется понимать какие флаги и с какими опциями передал пользователь и как-то менять поведение утилиты. В ноде эти опции можно получить через process.argv.

Запустив, например, команду для билда сторибука:
yarn build-storybook --output-dir dist/selene-static/storybook --quiet

Вызвав process.argv(), получим следующее:

[
"/Users/v7rulnik/.fnm/node-versions/v16.10.0/installation/bin/node",
"/Users/v7rulnik/projects/aviasales/selene/node_modules/@storybook/react/bin/build.js",
"--output-dir",
"dist/selene-static/storybook",
"--quiet"
]

Т.е. просто плоский список с разделением по пробелам. Работать с ним, прямо скажем, не очень удобно. Это послужило появлению yargs и minimist, которые упрощают парсинг, группируют название и опции и т.д.

И вот, в рамках обсуждения из ишью появилось предложение встроить в ноду утилиту для парсинга util.parseArgs(). Уже доступен полифилл @pkgjs/parseargs, но использовать его пока что не стоит. Это всего лишь proof of concept, который будут дорабатывать и, позже, он окажется доступен в самой ноде.


P.S. Если взглянуть на массив аргументов, то будет видно, что первым элементом всегда является путь до node. А вторым скрипт, который мы запускаем. Именно поэтому часто можно встретить process.argv.slice(2) — такиим образом обрезают два первых элемента, которые не содержат полезной информации.