通过npm脚本

时间:2016-09-19 22:20:42

标签: node.js npm

当我通过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 个答案:

答案 0 :(得分:0)

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