NodeJS: Как читать stdout и stderr дочернего процесса, порожденного явно порожденным процессом? - PullRequest
0 голосов
/ 05 сентября 2018

Я недавно работал над сервером сборки по требованию. Сервер сборки представляет собой API-интерфейс NodeJS / Express REST, который, по сути, оборачивает Angular CLI и соответствующие инструменты сборки для завершения пользовательского приложения Angular по требованию.

Все работает, как и ожидалось, от начала до конца, но я бы хотел быть более детальным с отчетами о состоянии, так как сборки Angular могут занимать довольно много времени при учете 2 очень больших частей процесса

Две самые продолжительные части процесса:

  1. npm install (обычно автоматически запускается с помощью схемы ng-new из коллекции @ angular / schematics по умолчанию)
  2. фактическая ng build команда.

2 легко решить, так как я порождаю этот процесс (ng build --prod) через child_process.spawn() напрямую.

1 оказался немного сложнее, так как длительный процесс npm install фактически запускается внутренне для стандартной схемы / команды Angular ng-new. Итак, если мое мышление верное, это, по сути, явно порожденный дочерний процесс (мой порожденный ng new), который порождает внутренне npm install.

Одна из работ, которую я придумала, - это передать --skip-install arg в ng new, что предотвратит запуск процесса npm install из-за схемы. После этого я могу вручную запустить npm install через child_process.spawn() и непосредственно наблюдать потоки stdout и stderr.

Мне любопытно, если кто-нибудь знает способ шпионить за потоками stderr и stdout из 'установки npm', которая запускается внутри моей явно порожденной ng new команды?

Спасибо!

1 Ответ

0 голосов
/ 05 ноября 2018

Если вы работаете в Linux, вы можете использовать strace, чтобы следить за выходом другого процесса.

strace -p7835 -e trace= -e write=3

См. этот ответ для более подробной информации.

Вы можете вызвать strace из узла, конечно, используя spawn. Чтобы найти pid процесса npm (который на самом деле является node процессом), вам необходимо получить дерево процессов с помощью команды ps. Уже есть модуль узла, который делает это: ps-tree , который также представляется кроссплатформенным.

Для альтернатив strace в Windows, проверьте это обсуждение . Я бы пошел на Process Monitor от Sysinternals.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...