2016-07-23 8 views
0

Ich habe versucht, ein Nodejs-Skript mit dem eingebauten child_process-Modul zu laufen, und es funktioniert gut, bis ich es Optionen gebe. Besonders, wenn ich die Eigenschaft env dem Optionsobjekt hinzufüge./bin/sh: 1: Knoten: nicht gefunden mit child_process.exec

let exec = require('child_process').exec; 

exec('node random.js', { env: {} }, (err) => { 
    console.log(err); 
}) 

Dann bekomme ich diesen Fehler: /bin/sh: 1: node: not found.

Ich habe Knoten mit NVM installiert, vielleicht ist das die Ursache, aber weiß nicht warum.

+0

Versuchen Sie mit dem vollständigen Pfad zum Knotenbefehl. –

+0

nicht auf bestimmte Version hardwire – Blacksonic

+0

Ich sage dies, um zu überprüfen, ob das Problem ist, verpassen Sie den Pfad Ihres Node-Installationsverzeichnisses. Die neue Shell, die Sie starten, teilt das env nicht mit seinem übergeordneten Prozess. –

Antwort

0

Wenn Sie eine neue Shell aus Ihrem Skript ausführen, haben diese nicht dieselbe Umgebung der übergeordneten Shell (Ihr Skript).

Sie müssen also alle erforderlichen Umgebung bereitstellen.

In Ihrem Fall sehe ich 2 Möglichkeiten, die Sie tun könnten.

Erstens: Sie einen Knoten Befehl mit dem vollständigen Pfad erstellen:

let exec = require('child_process').exec; 

let node_cmd = '/path/to/my/node/node'; 

exec(node_cmd + ' random.js', { env: {} }, (err) => { 
    console.log(err); 
}); 

So könnte man env Variablen verwenden Sie den Pfad zu handhaben, oder es nur ändern, wenn Sie benötigen.

Zweitens, um den Pfad-Variable auf den Befehl übergeben:

let exec = require('child_process').exec; 

let env_variables = 'PATH='+process.env.PATH; 

let cmd = env_variables + ' node random.js'; 

exec(cmd, { env: {} }, (err) => { 
    console.log(err); 
}); 

andere Möglichkeit, das dotenv Paket verwendet.

+0

[process.execPath] (https://nodejs.org/dist/latest-v6.x/docs/api/process.html#process_process_execpath) könnte ebenfalls hilfreich sein. – noisypixy

Verwandte Themen