产生一个subprocess来调用nodejs中的npm-installed命令会在windows中导致ENOENT

我搜查了很多,但没有得到正确的答案。

首先我确定这个命令在命令行下是可用的,这里是输出:

> lessc lessc: no input files usage: lessc [option option=parameter ...] <source> [destination] 

但是,当使用child_process.spawn ,我得到:

 > node test.js Encountered error: { [Error: spawn ENOENT] code: 'ENOENT', errno: 'ENOENT', syscall: 'spawn' } 

我确定process.env被赋予spawn ,这里是nodejs代码:

 var build = require('child_process').spawn( 'lessc', [], { stdio: 'inherit', env: process.env } ); build.on( 'error', function (err) { console.log('Encountered error:', err); process.exit(); } ); build.on( 'close', function (err) { console.log('close'); } ); 

而且,当命令通过npm install -g安装时,它只会遇到ENOENT ,例如dirdel系统命令

结果如下:

 var spawn = require('child_process').spawn; var b = spawn( process.env.comspec, ['/c', 'lessc'], { stdio: 'inherit' } ); 

请注意,您不需要显式传递env ,因为默认情况下是inheritance。