如果未指定cmd
扩展名,为什么无法从代码运行全局模块?如何在不更改启动代码的情况下修复它?
D:\Temp\Supertemp>node --version
v0.12.4
D:\Temp\Supertemp>phantomjs --version
1.9.8
D:\Temp\Supertemp>phantomjs.cmd --version
1.9.8
D:\Temp\Supertemp>node -e "var res=require('child_process').spawnSync('phantomjs',['--version']); console.log(res.stdout+'', res.error);"
null { [Error: spawnSync ENOENT] code: 'ENOENT', errno: 'ENOENT', syscall: 'spawnSync' }
D:\Temp\Supertemp>node -e "var res=require('child_process').spawnSync('phantomjs.cmd',['--version']); console.log(res.stdout+'', res.error);"
1.9.8
undefined
D:\Temp\Supertemp>
有一个全局安装的模块,例如phantomjs
npm install -g phantomjs
Npm已经从命令行添加了一个用于启动此模块的文件
%appdata%\npm\phantomjs.cmd
相应的文件夹在%path%
环境变量中指定。该模块可以从任何文件夹启动:
D:\Temp\Supertemp>phantomjs
phantomjs> ^CTerminate batch job (Y/N)?
^C
当我尝试从nodejs代码午餐时出现问题:
{ '0':
{ [Error: spawn phantomjs ENOENT]
code: 'ENOENT',
errno: 'ENOENT',
syscall: 'spawn phantomjs',
path: 'phantomjs' } }
上次我在自己的代码中看到了这个问题并通过显式扩展指定解决了它:启动phantomjs.cmd
工作正常,只有phantomjs
失败。请注意,如果从控制台说明,两种方式都可以。
现在这个问题发生在已安装的模块html-inspector
内。
如何在不更改模块源的情况下解决此问题?