运行简单节点程序时出现此错误:
/home/ubuntu/parent.js:4
throw error;
^
Error: Command failed: /bin/sh: 1: node: not found
at ChildProcess.exithandler (child_process.js:637:15)
at ChildProcess.EventEmitter.emit (events.js:98:17)
at maybeClose (child_process.js:735:16)
at Socket.<anonymous> (child_process.js:948:11)
at Socket.EventEmitter.emit (events.js:95:17)
at Pipe.close (net.js:466:12)
parent.js:
var exec = require('child_process').exec;
exec('node child.js',{env: {number: 123}},function(error,stdout,stderr){
if(error){ throw error; } console.log('stdout:\t',stdout);
console.log('stderr:\t',stderr);
});
child.js:
var number = process.env.number;
console.log(typeof(number));
答案 0 :(得分:3)
当您通过这些选项时:
{env: {number: 123}}
您覆盖所有环境变量,因此它不会继承您当前的变量。这包括PATH
,它是查找node
所必需的。除了你想要的那个之外,你还需要复制当前的环境变量:
env = {};
for(key in process.env) {
env[key] = process.env[key];
}
env.number = 123;
然后您使用此env
作为env
选项:
{env: env}
答案 1 :(得分:0)
因此,您尝试运行多个节点实例。对我来说,这看起来并不合适。您可以require('child.js')
或更好地构建应用程序。
如果你真的想这样做,你需要了解路径。父节点应用程序作为用户运行,一旦由该用户运行,它似乎没有到原始节点文件的路径。尝试执行export PATH=$PATH:/usr/local/bin
所在的/usr/local/bin/node
命令。如果节点在/bin
中,则使用该节点。找到节点可执行文件的位置,并将该bin目录添加到路径中。这必须在节点作为。
在节点中,您可以通过
查看可用的PATHexec('echo $PATH')
它要检查的每个目录都用冒号
分隔最好在节点之外做这个,但对我来说这整个情况似乎应该从第一个概念中重新考虑。