当我通过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脚本文档没有提到主题。
答案 0 :(得分:0)
这是预期的行为。 npm
只是一个会产生node
并完成执行的代理,所以你从来没有通过运行节点应用程序的通道。没有办法解决这个问题。