通过 npm 脚本生成时从子进程向父进程发送消息

Posted

技术标签:

【中文标题】通过 npm 脚本生成时从子进程向父进程发送消息【英文标题】:Sending a message from child to parent process when spawned via npm script 【发布时间】:2016-09-19 22:20:42 【问题描述】:

当我通过 npm 脚本生成子进程时,我失去了 ipc 通道。

我有一个这样的子脚本

if (process.send)  process.send('child') 

如果像这样从另一个脚本生成它,父进程将成功接收并打印消息

var spawn = require('child_process').spawn
spawn('node', ['child.js'], stdio: ['inherit', 'inherit', 'inherit', 'ipc')

spawn.on('message', function (msg)  console.log(msg) )

但是如果我在我的 package.json 中将 node child.js 定义为一个 npm 脚本,例如

"scripts": 
    "child": "node child.js"

改为这样做spawn('npm', ['run', 'child'], stdio: ['inherit', 'inherit', 'inherit', 'ipc')

process.send 在我的子脚本中未定义。我想这是因为 npm 现在正在生成该进程,并且该进程不会继承我的 stdio 设置。也许有办法解决这个问题。 npm 脚本文档没有提及该主题。

【问题讨论】:

【参考方案1】:

这是预期的行为。 npm 只是一个代理,它会产生 node 并完成执行,所以你从一开始就没有通道到正在运行的节点应用程序。没有办法解决这个问题。

【讨论】:

以上是关于通过 npm 脚本生成时从子进程向父进程发送消息的主要内容,如果未能解决你的问题,请参考以下文章

如何将值从子脚本传递给同时运行的父脚本?

无法将子进程发送回父进程的消息

从子级向父级发送数据时无法刷新 vue 引导表

在 Electron 中向父窗口发送消息

从子进程调用的外部 python 脚本打印 tqdm 进度条

UNIX环境高级编程第八章二