产生一个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 ,例如dir
或del
系统命令
结果如下:
var spawn = require('child_process').spawn; var b = spawn( process.env.comspec, ['/c', 'lessc'], { stdio: 'inherit' } );
请注意,您不需要显式传递env
,因为默认情况下是inheritance。