У меня есть веб-сервер, написанный на Node.js, и я хотел бы запустить его с определенной папкой. Я не уверен, как получить доступ к аргументам в JavaScript. Я запускаю узел так:
$ node server.js folder
вот server.js
мой код сервера Справка Node.js говорит, что это возможно:
$ node -h
Usage: node [options] script.js [arguments]
Как мне получить доступ к этим аргументам в JavaScript? Каким-то образом я не смог найти эту информацию в Интернете.
process.argv[n]
гдеn
находится индекс,node [options] [ -e script | script.js ] [arguments]
илиnode debug script.js [arguments]
. например:node --harmony script.js balala
илиnode --no-deprecation --enable-ssl2 script.js balala
, мы можем использовать process.execArgv с process.argvЧтобы нормализовать аргументы, которые получала бы обычная функция javascript, я делаю это в своих сценариях оболочки node.js:
Обратите внимание, что первый аргумент - это обычно путь к nodejs, а второй аргумент - это местоположение скрипта, который вы выполняете.
источник
execArgv
это не вargv
так что 2 достаточноprocess.argv.splice(process.execArgv.length + 2)
: для командыnode --harmony script.js --version
,process.argv
это['/usr/local/bin/node', 'script.js', '--version']
. Флаги наnode
которые НЕ включены вprocess.argv
!Уточненное право ответ на это его использовать minimist библиотеку. Мы привыкли использовать node-optimist, но с тех пор он устарел.
Вот пример того, как его использовать, взятый из минималистской документации:
-
-
источник
2018 ответ на основе текущих тенденций в дикой природе:
Разбор аргументов ванильного javascript:
Это возвращает:
Официальные документы
Наиболее используемые пакеты NPM для разбора аргументов:
Минимист : для минимального разбора аргумента.
Commander.js : Самый распространенный модуль для разбора аргументов.
Мяу : более легкая альтернатива Commander.js
Yargs : более сложный анализ аргументов (тяжелый).
Vorpal.js : зрелые / интерактивные приложения командной строки с разбором аргументов.
источник
Оптимист (нод-оптимист)
Проверьте библиотеку оптимиста , это намного лучше, чем анализ параметров командной строки вручную.
Обновить
Оптимист устарел. Попробуйте яргов, которые являются активным форком оптимиста.
источник
Несколько отличных ответов здесь, но все это кажется очень сложным. Это очень похоже на то, как bash-скрипты получают доступ к значениям аргументов, и это уже предусмотрено стандартом для node.js, как указал MooGoo. (Просто чтобы было понятно кому-то новичку в node.js)
Пример:
источник
Commander.js
Прекрасно работает для определения ваших вариантов, действий и аргументов. Он также генерирует страницы справки для вас.
быстро
Прекрасно работает для получения ввода от пользователя, если вам нравится подход обратного вызова.
Co-Prompt
Прекрасно работает для получения информации от пользователя, если вам нравится генераторный подход.
источник
Нет библиотек с флагами, отформатированными в простой объект
Примеры
просто
вход
вывод
Реальный мир
вход
вывод
источник
= longArg[1]
вы могли написать,= longArg.length > 1 ? longArg[1] : true;
Это позволило бы вам передать этот тип аргумента:node config/build.js --flag1 --flag2
Библиотека Стдио
Самым простым способом анализа аргументов командной строки в NodeJS является использование модуля stdio . Вдохновленный
getopt
утилитой UNIX , он так же тривиален:Если вы запустите предыдущий код с этой командой:
Тогда
ops
объект будет выглядеть следующим образом:Таким образом, вы можете использовать его как хотите. Например:
Сгруппированные параметры также поддерживаются, поэтому вы можете писать
-om
вместо-o -m
.Кроме того,
stdio
может автоматически генерировать справку / использование. Если вы позвоните,ops.printHelp()
вы получите следующее:Предыдущее сообщение также показывается, если не указана обязательная опция (с предшествующим сообщением об ошибке) или если она указана неправильно (например, если вы указываете один аргумент для опции, а для нее нужно 2).
Вы можете установить модуль stdio с помощью NPM :
источник
Если ваш сценарий называется myScript.js и вы хотите передать имя и фамилию «Шон Уортингтон» в качестве аргументов, как показано ниже:
Затем в вашем сценарии вы пишете:
источник
Аргументы командной строки стоит посмотреть!
Вы можете установить параметры, используя основные стандарты обозначений ( узнать больше ). Все эти команды эквивалентны, устанавливая одинаковые значения:
Чтобы получить доступ к значениям, сначала создайте список определений параметров, описывающих параметры, которые принимает ваше приложение.
type
Свойство является функция сеттера (значение поставляется проходят через это), что дает вам полный контроль над полученным значением.Затем проанализируйте параметры с помощью commandLineArgs () :
options
теперь выглядит так:Расширенное использование
Помимо приведенного выше типичного использования, вы можете настроить аргументы командной строки для принятия более сложных синтаксических форм.
Синтаксис на основе команд (стиль git) в форме:
Например.
Синтаксис команд и подкоманд (стиль Docker) в форме:
Например.
Руководство по использованию
Руководство по использованию (обычно печатается, когда
--help
установлено) может быть сгенерировано с использованием командной строки . Посмотрите примеры ниже и прочитайте документацию для получения инструкций по их созданию.Типичный пример руководства по использованию.
Руководство по использованию Polymer-Cli - хороший пример из жизни.
Дальнейшее чтение
Есть еще много всего, чему можно научиться, пожалуйста, смотрите в вики примеры и документацию.
источник
partial
иstopAtFirstUnknown
опций. Смотрите документы .Для этого есть приложение. Ну, модуль. Ну, больше чем один, возможно, сотни.
Яргс один из самых забавных, его документы круто читать.
Вот пример со страницы github / npm:
Вывод здесь (он читает опции с тире и т. Д., Короткие и длинные, числовые и т. Д.).
источник
Вот мое решение 0-dep для именованных аргументов:
Пример:
Примечание. Естественно, это не удастся, если аргумент содержит
=
. Это только для очень простого использования.источник
Вероятно, это хорошая идея, чтобы управлять вашей конфигурацией централизованно, используя что-то вроде nconf https://github.com/flatiron/nconf
Это помогает вам работать с файлами конфигурации, переменными среды, аргументами командной строки.
источник
без библиотек: используя Array.prototype.reduce ()
для этой команды
node index.js count=2 print debug=false msg=hi
также,
мы можем изменить
(намного дольше)
для автоматического разбора Boolean & Number
источник
count
и параметрыc
командной строки (c
в качестве псевдонима / сокращения дляcount
)?Передача, анализ аргументов - это простой процесс. Node предоставляет вам свойство process.argv, которое представляет собой массив строк, которые являются аргументами, которые использовались при вызове Node. Первая запись массива - это исполняемый файл Node, а вторая запись - имя вашего скрипта.
Если вы запускаете скрипт с приведенными ниже аргументами
Файл: args.js
Вы получите массив как
источник
Если вы хотите запустить что-то вроде этого:
-
Или что-то вроде:
-
источник
proj.js
Терминал:
Результат:
Explaination:
0
: Каталог node.exe в вашей обработке (C: \ Program Files \ nodejs \ node.exe ')1
: Каталог вашего файла проекта. (proj.js)2
: Ваш первый аргумент для узла (arg1)3
: Ваш второй аргумент для узла (arg2)4
: Ваш третий аргумент для узла (arg3)ваши фактические аргументы начинают
2nd
индекс формыargv
массива, то естьprocess.argv[2]
.источник
Вы можете получить аргументы командной строки, используя
system.args
. И я использую приведенное ниже решение для разбора аргументов в объект, чтобы я мог получить тот, который я хочу по имени.теперь вам не нужно знать индекс аргумента. используйте это как
args.whatever
источник
map
свойство не определено.Вы можете проанализировать все аргументы и проверить, существуют ли они.
file: parse-cli-arguments.js:
Чем просто сделать:
источник
Без библиотек
Если вы хотите сделать это в vanilla JS / ES6, вы можете использовать следующее решение
работал только в NodeJS> 6
И эта команда
даст следующий результат
Пожалуйста, исправьте код в карте и уменьшите функцию, если вы найдете более элегантное решение, спасибо;)
источник
let args = process.argv.slice(2).reduce((acc, arg) => { let [k, v] = arg.split('=') acc[k] = v return acc }, {})
Хотя вышеприведенные ответы являются идеальными, и кто-то уже предложил yargs, использовать пакет действительно просто. Это хороший пакет, который делает передачу аргументов в командную строку действительно простой.
Пожалуйста, посетите https://yargs.js.org/ для получения дополнительной информации.
источник
Передавать аргументы легко, а получать их - просто читать массив process.argv, который Node делает доступным везде, в основном. Но вы наверняка захотите прочитать их как пары ключ / значение, поэтому вам потребуется сценарий для его интерпретации.
Джозеф Мердриньяк опубликовал прекрасную статью с использованием Reduce, но он использовал
key=value
синтаксис вместо-k value
и--key value
. Я переписал его намного уродливее и дольше, чтобы использовать этот второй стандарт, и я опубликую его как ответ, потому что он не подходит в качестве комментария. Но это делает работу.С этим кодом команда
node script.js alpha beta -charlie delta --echo foxtrot
выдаст вам следующий объектисточник
Самый простой способ получения аргументов в Node.js - через массив process.argv. Это глобальный объект, который вы можете использовать, не импортируя для этого никаких дополнительных библиотек. Вам просто нужно передать аргументы в приложение Node.js, как мы показали ранее, и эти аргументы могут быть доступны в приложении через массив process.argv.
Первым элементом массива process.argv всегда будет путь файловой системы, указывающий на исполняемый файл узла. Второй элемент - это имя файла JavaScript, который выполняется. И третий элемент - это первый аргумент, который фактически был передан пользователем.
Все, что делает этот скрипт - это циклически перемещаться по массиву process.argv и печатать индексы вместе с элементами, хранящимися в этих индексах. Это очень полезно для отладки, если вы когда-нибудь задаетесь вопросом, какие аргументы вы получаете и в каком порядке.
Вы также можете использовать библиотеки, такие как yargs, для работы с аргументами commnadline.
источник
Решение TypeScript без библиотек:
Входные данные:
ts-node index.js -p param --parameter parameter
Вывод:
{ p: 'param ', parameter: 'parameter' }
источник
process.argv
Ваш друг, захват аргументов командной строки изначально поддерживается в Node JS. Смотрите пример ниже:источник
как указано в документе docs. Свойство process.argv возвращает массив, содержащий аргументы командной строки, переданные при запуске процесса Node.js.
Например, предполагая следующий скрипт для process-args.js:
Запуск процесса Node.js как:
Будет генерировать вывод:
источник
Большинство людей дали хорошие ответы. Я также хотел бы внести кое-что здесь. Я предоставляю ответ, используя
lodash
библиотеку, чтобы перебрать все аргументы командной строки, которые мы передаем при запуске приложения:Для запуска кода выше просто запустите следующие команды:
Результатом будет:
источник
Лучший способ передать аргументы командной строки в программу Node.js - использовать интерфейс командной строки (CLI)
Существует отличный модуль npm, называемый nodejs-cli, который вы можете использовать.
Если вы хотите создать его без зависимостей, у меня есть его на моем Github, если вы хотите проверить его, на самом деле он довольно прост и удобен в использовании, нажмите здесь .
источник
Решение ES6 в стиле без зависимостей:
источник