Вам нужна опция shell: true
для spawn()
, как в spawn('dir', {shell: true});
.
Этот код работает, как и ожидалось, на Windows:
const spawn = require('child_process').spawn;
const spawnTest = (() => {
const dir = spawn('dir', {shell: true}); // <== shell: true option
dir.stdout.on('data', (data) => {
console.log(`spawn stdout: ${data}`);
});
dir.stderr.on('data', (data) => {
console.log(`spawn stderr: ${data}`);
});
dir.on('error', (code) => {
console.log(`spawn error: ${code}`);
});
dir.on('close', (code) => {
console.log(`spawn child process closed with code ${code}`);
});
dir.on('exit', (code) => {
console.log(`spawn child process exited with code ${code}`);
});
})();
Я предполагаю, что, поскольку dir
не является реальной программой (в Windows нет dir.exe
) Вы должны указать команде spawn()
, должна ли она выполняться в командной оболочке или без командной оболочки. В то время как на других платформах такие вещи, как ls
, являются реальными программами, которые могут быть запущены в любом случае.