Paso 1: asegúrese de que spawnse llame de la manera correcta
Primero, revise los documentos para child_process.spawn (comando, argumentos, opciones) :
Inicia un nuevo proceso con el dado command, con argumentos de línea de comando en args. Si se omite, el valor argspredeterminado es una matriz vacía.
El tercer argumento se usa para especificar opciones adicionales, que por defecto son:
{ cwd: undefined, env: process.env }
Se usa envpara especificar variables de entorno que serán visibles para el nuevo proceso, el valor predeterminado es process.env.
Asegúrese de no poner ningún argumento en la línea de comandos commandy toda la spawnllamada es válida . Proceda al siguiente paso.
Paso 2: identifique el emisor de eventos que emite el evento de error
Busque en su código fuente cada llamada a spawn, o child_process.spawn, es decir,
spawn('some-command', [ '--help' ]);
y adjunte un detector de eventos para el evento 'error', de modo que se note el Emisor de eventos exacto que lo está arrojando como 'No controlado'. Después de la depuración, ese controlador puede eliminarse.
spawn('some-command', [ '--help' ])
.on('error', function( err ){ throw err })
;
Ejecute y debería obtener la ruta del archivo y el número de línea donde se registró su escucha de 'error'. Algo como:
/file/that/registers/the/error/listener.js:29
throw err;
^
Error: spawn ENOENT
at errnoException (child_process.js:1000:11)
at Process.ChildProcess._handle.onexit (child_process.js:791:34)
Si las dos primeras líneas siguen siendo
events.js:72
throw er; // Unhandled 'error' event
repita este paso hasta que no lo estén. Debe identificar al oyente que emite el error antes de continuar con el siguiente paso.
Paso 3: asegúrese de que la variable de entorno $PATHesté configurada
Hay dos escenarios posibles:
- Confía en el
spawncomportamiento predeterminado , por lo que el entorno de proceso secundario será el mismo que process.env.
- Usted está explícitamente pasar un
envobjeto a spawnen el optionsargumento.
En ambos escenarios, debe inspeccionar la PATHclave en el objeto de entorno que utilizará el proceso secundario generado.
Ejemplo para el escenario 1
// inspect the PATH key on process.env
console.log( process.env.PATH );
spawn('some-command', ['--help']);
Ejemplo para el escenario 2
var env = getEnvKeyValuePairsSomeHow();
// inspect the PATH key on the env object
console.log( env.PATH );
spawn('some-command', ['--help'], { env: env });
La ausencia de PATH(es decir, es undefined) hará spawnque se emita el ENOENTerror , ya que no será posible localizar ninguno a commandmenos que sea una ruta absoluta al archivo ejecutable.
Cuando PATHestá configurado correctamente, continúe con el siguiente paso. Debe ser un directorio o una lista de directorios. El último caso es el habitual.
Paso 4: asegúrese de que commandexista en un directorio de los definidos enPATH
Spawn puede emitir el ENOENTerror si el nombre de archivo command(es decir, 'algún comando') no existe en al menos uno de los directorios definidos en PATH.
Localice el lugar exacto de command. En la mayoría de las distribuciones de Linux, esto se puede hacer desde una terminal con el whichcomando. Le indicará la ruta absoluta al archivo ejecutable (como arriba), o le indicará si no se encuentra.
Ejemplo de uso de cuál y su salida cuando se encuentra un comando
> which some-command
some-command is /usr/bin/some-command
Ejemplo de uso de cuál y su salida cuando no se encuentra un comando
> which some-command
bash: type: some-command: not found
Los programas mal instalados son la causa más común de un comando no encontrado . Consulte la documentación de cada comando si es necesario e instálelo.
Cuando el comando es un archivo de script simple, asegúrese de que sea accesible desde un directorio en el PATH. Si no es así, muévalo a uno o haga un enlace a él.
Una vez que determine que PATHestá configurado correctamente y commandes accesible desde él, debería poder generar el proceso de su hijo sin spawn ENOENTser arrojado.
execlugar de pasar el comando como primer argumento y las opciones como una matriz para el segundo argumento. Por ejemplo, estaba haciendo enspawn( "adb logcat -c" )lugar despawn( "adb", [ "logcat", "-c" ] ).