我在创作一个Grunt任务时遇到了一些困难。我试图执行npm install,然后是bower install,然后是一个grunt中心目标(为多个子项目触发构建命令)。节点JS - child_process spawn('npm install')在Grunt任务中导致ENOENT错误
我遇到的问题与child_process谎言。我得到重生ENOENT错误,如果我在繁重的任务中运行以下命令,与故宫安装,因此目前注释掉产卵命令:
var path = require('path'),
projectPath = path.resolve(process.cwd(), this.data.activity);
grunt.log.debug('project path computed as: ', projectPath);
process.chdir(projectPath);
console.log('current dir is: ', process.cwd());
console.log('EVN is: ', process.env);
var spawnProcess = spawn('ls');
// var spawnProcess = spawn('npm install');
spawnProcess.stdout.on('data', function (data) {
console.log('' + data);
});
spawnProcess.stderr.on('data', function(data) {
console.log('something went wrong installing deps for ' + path + '. Error: ', data);
});
spawnProcess.on('close', function (exitCode) {
console.log('ls has finished with Exit Code: ' + exitCode);
});
当前的代码(除ls而不是NPM安装)结果:
running "install:projects" (install) task[D] Task source: /Users/zedd45/proj/Gruntfile.js
Verifying property install.projects exists in config...OK
File: [no files]
[D] project path computed as: /Users/zedd45/proj/activity/web/client
current dir is: /Users/zedd45/proj/activity/web/client
EVN (abbreviated) is: {
TERM_PROGRAM: 'iTerm.app',
SHELL: '/bin/bash',
PWD: '/Users/zedd45/proj',
...
OLDPWD: '/Users/zedd45/proj/activity/web/client',
_: '/usr/local/bin/grunt' }
GruntFile.js
bower.json
package.json
this_is_the_directory_you_are_looking_for.txt
ls has finished with Exit Code: 0
,但如果我改变“LS”到“故宫安装”我得到,而不是 ``致命错误:产卵ENOENT
立即ENV打印以下。
我已经尝试chmod 777该目录,这似乎没有帮助。
我也曾尝试:
// var spawnProcess = spawn('npm install', {'cwd': projectPath});
和
// var spawnProcess = spawn('npm install', [], {'cwd': projectPath});
前者导致
Warning: Object # has no method 'slice' Use --force to continue.
后仍导致ENOENT错误。
任何帮助确切地说这个ENOENT错误可能会帮助很多;我没有太多的成功谷歌搜索它与child process API docs
那完美。我无法相信一旦你提供了解决方案,解决方案是多么的简单/明显,或者它难以避免。非常感谢! – zedd45
为可能的访问者的未来参考,http://stackoverflow.com/questions/27688804/how-to-debug-any-node-js-child-process-error-spawn-enoent – laconbass
嗯,这不适用于我。仍然得到一个spawnSync npm ENOENT(是的,我正在使用同步版本) – ianbeks