[英]NodeJS: How to read stdout and stderr of a child process spawned by an explicitly spawned process?
我最近一直在按需构建服务器上工作。 构建服务器是NodeJS / Express REST API,它实质上包装了Angular CLI和相关的构建工具,用于完成自定义的按需Angular应用程序。
一切工作都按预期进行,但是我希望能够通过状态报告获得更详细的信息,因为当考虑到流程的两个非常大的部分时,Angular构建会非常耗时
该过程中运行时间最长的两个部分:
npm install
(通常通过默认的@ angular / schematics集合中的ng-new示意图自动启动) ng build
命令。 2很容易解决,因为我直接通过child_process.spawn()
ng build --prod
该进程( ng build --prod
)。
1已被证明有点复杂,因为长时间运行的npm install
过程实际上是在默认Angular ng-new原理图/命令内部开始的。 因此,如果我的想法是正确的,那么这本质上是一个显式产生的子进程(我产生的ng new
),它在内部产生npm install
。
我想到的一种解决方法是将--skip-install
arg传递给ng new
,这将防止内部npm install
过程被原理图启动。 这样,我就可以通过child_process.spawn()
手动启动npm install
并直接观察stdout和stderr流。
我很好奇是否有人知道在我显式生成的ng new
命令中启动的“ npm install”中监视stderr和stdout流的方法吗?
谢谢!
如果您在Linux上运行,则可以使用strace
监视另一个进程的输出。
strace -p7835 -e trace= -e write=3
有关更多详细信息,请参见此答案 。
您当然可以使用spawn
从节点调用strace
。 要查找npm
进程的pid
(实际上是node
进程btw),您需要使用ps
命令获取进程树。 已经有一个执行此操作的节点模块: ps-tree ,它似乎也是跨平台的。
有关Windows上strace
替代方法,请查看此讨论 。 我会从Sysinternals那里选择Process Monitor 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.