【发布时间】:2013-12-07 23:52:30
【问题描述】:
我在编写 Grunt 任务时遇到了一些困难。我正在尝试执行 npm install,然后是 bower install,然后是 grunt hub 目标(触发多个子项目的构建命令)。
我遇到的问题在于 child_process。如果我在我的 grunt 任务中运行以下命令,使用当前已注释掉的 npm install spawn 命令,我会收到 spawn 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 install)导致:
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' 更改为 'npm install' 我会得到 ``致命错误:生成 ENOENT
紧接着 ENV 打印。
我已经为那个目录尝试了 chmod 777,但这似乎没有帮助。
我也试过了:
// var spawnProcess = spawn('npm install', {'cwd': projectPath});
和
// var spawnProcess = spawn('npm install', [], {'cwd': projectPath});
前者的结果是
警告:对象 # 没有方法 'slice' 使用 --force 来 继续。
后者仍然会导致 ENOENT 错误。
任何关于这个 ENOENT 错误究竟是什么的帮助可能会有很大帮助;我在谷歌上搜索它和child process API docs
都没有取得太大的成功【问题讨论】: