Как передать возвращаемое значение из одного `npm run script.js` в качестве параметра другому` npm run script2.js`? - PullRequest
1 голос
/ 17 марта 2019

Есть ли способ как-то реализовать его в scripts в package.json без использования сторонних компонентов?

1 Ответ

0 голосов
/ 19 марта 2019

Я не уверен, что это лучшее решение, но я еще не смог придумать что-то лучшее.Так как я искал подход для консоли Windows , я проверил его только там, но я думаю, что он должен работать и в оболочке Linux.

Итак, у нас будет 2 файла JavaScript:

  1. send-param.js: должен отправить (вернуть) строковый параметр
  2. 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!'

...