Я не уверен, что это лучшее решение, но я еще не смог придумать что-то лучшее.Так как я искал подход для консоли Windows , я проверил его только там, но я думаю, что он должен работать и в оболочке Linux.
Итак, у нас будет 2 файла JavaScript:
send-param.js
: должен отправить (вернуть) строковый параметр read-param.js
: должен получить этот строковый параметр в качестве аргумента
Обаэти файлы JS должны запускаться из сценариев package.json
.Сама техника довольно проста: send-param.js
записывает строковое значение в stdout
, тогда как read-param.js
затем получает его в качестве аргумента.Основная проблема заключалась в том, как «преобразовать» stdout
в аргумент для сценария read-param.js
.
Чтобы записать что-то в stdout
, мы можем использовать console.log
, и именно это send-param.js
и делает:
console.log("Hello World!");
Далее мы хотим запустить read-param.js
, чтобы получить строку "Hello World!"
из аргументов, но кажется, что это невозможно сделать непосредственно в консоли Windows.Поэтому мне пришлось использовать промежуточную операцию, чтобы записать этот аргумент из stdout
во вспомогательный файл (я назвал его '1.txt'
), и здесь это делается в первой части скрипта:
node send-param.js > 1.txt
Теперь у нас есть "Hello World!"
в файле '1.txt'
, и мы должны как-то отправить его в качестве параметра сценарию read-param.js
.Опять же, я не смог найти, как сделать это непосредственно в консоли Windows, и использовал переменную, которую я назвал 'ARG'
:
set /p ARG=<1.txt
Наконец, мы можем использовать 'ARG'
переменная в качестве аргумента для сценария out read-param.js
:
"node read-param.js% ARG%"
Первое, что мне пришло в голову, - это выполнить все команды за один раз.Строковый скрипт, подобный следующему:
"send-param.js > 1.txt && set /p ARG=<1.txt && node read-param.js %ARG%"
, но он не будет работать, поскольку требуется запускать set
как отдельную команду (, посмотрите, почему ).
В read-param.js
мы просто читаем первый аргумент как process.argv[2]
(Node.js резервирует 0 и 1-й для своих собственных аргументов).
Вот окончательный рабочий пример :
send-param.js:
console.log("Hello World!");
read-param.js:
const argument = process.argv[2];
if (!argument)
console.log('An argument is required.');
else
console.log(`Argument: '${argument}'`);
package.json:
"scripts": {
"send": "node send-param.js > 1.txt && set /p ARG=<1.txt && npm run read",
"read": "node read-param.js %ARG%",
}
Теперь выполните команду npm run send
, и вы получите: Argument: 'Hello World!'