Langkah 1: Pastikan spawn disebut dengan cara yang benar
Pertama, tinjau dokumen untuk child_process.spawn (perintah, args, opsi) :
Meluncurkan proses baru dengan yang diberikan command, dengan argumen baris perintah di args. Jika dihilangkan,args default ke Array kosong.
Argumen ketiga digunakan untuk menentukan opsi tambahan, yang secara default adalah:
{ cwd: undefined, env: process.env }
Gunakan envuntuk menentukan variabel lingkungan yang akan terlihat oleh proses baru, standarnya adalah process.env.
Pastikan Anda tidak memasukkan argumen baris perintah apa pun commanddan seluruh spawnpanggilan itu valid . Lanjutkan ke langkah selanjutnya.
Langkah 2: Identifikasi Emitor Peristiwa yang memancarkan peristiwa kesalahan
Cari pada kode sumber Anda untuk setiap panggilan ke spawn, atau child_process.spawn, yaitu
spawn('some-command', [ '--help' ]);
dan lampirkan di sana pendengar acara untuk acara 'kesalahan', sehingga Anda dapat mengetahui Peristiwa Emitor yang tepat yang melemparkannya sebagai 'Tidak Ditangani'. Setelah debugging, pawang itu dapat dihapus.
spawn('some-command', [ '--help' ])
.on('error', function( err ){ throw err })
;
Jalankan dan Anda harus mendapatkan jalur file dan nomor baris tempat pendaftar 'kesalahan' Anda terdaftar. Sesuatu seperti:
/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)
Jika dua baris pertama masih
events.js:72
throw er; // Unhandled 'error' event
lakukan langkah ini lagi sampai tidak. Anda harus mengidentifikasi pendengar yang memancarkan kesalahan sebelum melanjutkan ke langkah berikutnya.
Langkah 3: Pastikan variabel lingkungan $PATH diatur
Ada dua skenario yang mungkin:
- Anda mengandalkan
spawnperilaku default , sehingga lingkungan proses anak akan sama dengan process.env.
- Anda explicity melewati sebuah
envobjek untuk spawndi optionsargumen.
Dalam kedua skenario, Anda harus memeriksa PATHkunci pada objek lingkungan yang akan digunakan proses anak yang dilahirkan.
Contoh untuk skenario 1
// inspect the PATH key on process.env
console.log( process.env.PATH );
spawn('some-command', ['--help']);
Contoh untuk skenario 2
var env = getEnvKeyValuePairsSomeHow();
// inspect the PATH key on the env object
console.log( env.PATH );
spawn('some-command', ['--help'], { env: env });
Tidak adanya PATH(yaitu, itu undefined) akan menyebabkan spawnmemancarkan ENOENTkesalahan , karena itu tidak akan mungkin untuk menemukan apa pun commandkecuali itu adalah jalur absolut ke file yang dapat dieksekusi.
Ketika PATHdiatur dengan benar, lanjutkan ke langkah berikutnya. Itu harus berupa direktori, atau daftar direktori. Kasus terakhir adalah biasa.
Langkah 4: Pastikan commandada di direktori yang ditentukan dalamPATH
Bibit dapat memancarkan ENOENTkesalahan jika nama file command(yaitu, 'beberapa perintah') tidak ada di setidaknya satu direktori yang ditentukan PATH.
Temukan tempat yang tepat dari command. Pada kebanyakan distribusi linux, ini dapat dilakukan dari terminal dengan whichperintah. Ini akan memberi tahu Anda jalur absolut ke file yang dapat dieksekusi (seperti di atas), atau memberi tahu jika itu tidak ditemukan.
Contoh penggunaan yang mana dan hasilnya ketika suatu perintah ditemukan
> which some-command
some-command is /usr/bin/some-command
Contoh penggunaan yang mana dan hasilnya ketika suatu perintah tidak ditemukan
> which some-command
bash: type: some-command: not found
program yang salah pasang adalah penyebab paling umum untuk perintah yang tidak ditemukan .Lihat setiap dokumentasi perintah jika perlu dan pasang.
Ketika perintah adalah file skrip sederhana memastikan itu dapat diakses dari direktori di PATH. Jika tidak, pindahkan ke salah satu atau buat tautan ke sana.
Setelah Anda menentukan PATHdiatur dengan benar dan commanddapat diakses dari itu, Anda harus dapat menelurkan proses anak Anda tanpa spawn ENOENTdilemparkan.
execbukannya meneruskan perintah sebagai argumen pertama dan opsi sebagai Array untuk argumen kedua. misal sayaspawn( "adb logcat -c" )malah melakukanspawn( "adb", [ "logcat", "-c" ] ).