如何从代码中将全局安装的模块作为应用程序启动?

时间:2015-07-17 14:40:08

标签: node.js windows process npm launch

短版

如果未指定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内。

如何在不更改模块源的情况下解决此问题?

PS:Same question in Russian

0 个答案:

没有答案