0

単純なノード プログラムの実行中に次のエラーが発生します。

/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)

親.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));
4

2 に答える 2

3

これらのオプションを渡すと:

{env: {number: 123}}

すべての環境変数を上書きしているため、現在の環境変数は継承されません。これには、PATH検索に必要な が含まれますnode。必要なものに加えて、現在の環境変数をコピーする必要があります。

env = {};
for(key in process.env) {
  env[key] = process.env[key];
}
env.number = 123;

そして、これenvenvオプションとして使用します。

{env: env}
于 2013-09-20T15:27:18.217 に答える
0

したがって、実行しようとしているノード インスタンスが複数あります。私には、これは正しくないように見えます。アプリケーションをより適切に構築できrequire('child.js')ます。

本当にこれを行いたい場合は、パスを理解する必要があります。親ノード アプリケーションはユーザーとして実行されており、そのユーザーによって実行されると、元のノード ファイルへのパスがないように見えます。export PATH=$PATH:/usr/local/bin 存在する場所でコマンドを実行してみてください/usr/local/bin/node。ノードが にある場合は/bin、それを使用します。ノード実行可能ファイルの場所を見つけて、その bin ディレクトリをパスに追加します。これは、ノードを実行するユーザーで行う必要があります。

ノードでは、実行することで使用可能な PATH を確認できる場合があります

exec('echo $PATH')

チェックしている各ディレクトリはコロンで区切られています

ノードの外でこれを行うことが望ましいですが、私には、この全体の状況は最初の概念から再考する必要があるように思えます。

于 2013-09-20T14:09:08.880 に答える