无论出于何种原因,在Node.js中,函数process.send在某些环境中定义,但在其他环境中未定义。例如,当我从Node.js中的父进程分叉子进程时,如:
//parent process
var cp = require('child_process');
var k = cp.fork('./child.js',['arg1','arg2','arg3']);
k.send('fail'); //k.send is defined...
process.send("ok, let's try this..."); //process.send is NOT defined
在子进程中:
//child.js
process.send('message'); //process.send is defined, and will send a message to the parent process above
为什么process.send
在某些Node.js进程中有条件地定义而不是其他进程?看起来似乎是Node.js架构师的糟糕设计决定。
我知道如何解决这个问题的唯一方法是:
if(typeof process.send === 'function'){
process.send('what I want to send')
});
答案 0 :(得分:16)
子进程有process.send
方法与产生它们的进程进行通信,而根进程没有任何“父”进行通信,所以它不在那里。来自docs:
在子进程中,进程对象将有一个send()方法,进程每次在其通道上收到消息时都会发出对象。
为了避免不得不“使用条件”丢弃代码,临时解决方案可能只是将“noop”函数放在可能产生进程的任何“根”文件顶部的位置:
process.send = process.send || function () {};
答案 1 :(得分:0)
使用 Sapper 和 Svelte 的解决方法:
基本上,当您在环境中提供 SAPPER_EXPORT 变量时,可以在流程中收到此错误。
有关问题的更多详细信息:https://github.com/Zimtir/SENT-template/issues/114