2014-02-18 37 views
12

我试图建立一个使用Gulp.js的jekyll站点。我读过,我不应该在this question中使用插件。运行jekyll作为一个孩子进程中的一揽子/节点

我一直在使用一个子进程的建议一直在调查,但我不断收到一个错误:

events.js:72 
    throw er; // Unhandled 'error' event 
     ^
Error: spawn ENOENT 
    at errnoException (child_process.js:988:11) 
    at Process.ChildProcess._handle.onexit (child_process.js:779:34) 

这是我一饮而尽文件:

var gulp = require('gulp'); 
var spawn = require('child_process').spawn; 
var gutil = require('gulp-util'); 

gulp.task('jekyll', function(){ 
    spawn('jekyll', ['build'], {stdio: 'inherit'}); 
}); 

gulp.task('default', ['jekyll']); 

我在做什么错?我在节点0.10.25,赢7。

编辑 我以前有一个谷歌ENOENT错误。已经检查了我的路径,Ruby在那里,我可以从命令行运行jekyll。仍然没有快乐。

回答

14

我也有这个问题,并找到了答案,用产卵。

问题在于Node如何在Windows上找到可执行文件。欲了解更多详细看这个答案:

https://stackoverflow.com/a/17537559

总之,为了获得重生工作变动spawn('jekyll', ['build'])spawn('jekyll.bat', ['build'])

+0

SpikeMeister,我只是看到你的答案搜索我自己的问题。对不起,没有接受,并提前投票。 您是否知道.bat修补程序可在Mac/Unix机器上使用? 让我的一天! – matthewbeta

+2

重新我以前的评论。您可以根据操作系统设置命令: 'var jekyll = process.platform ===“win32”? “jekyll.bat”:“jekyll”;' 然后运行: 'spawn(jekyll'['build'])'' – matthewbeta

8

所以我最终使用exec来代替。这是我的一饮而尽文件:

var gulp = require('gulp'); 
var exec = require('child_process').exec; 
var gutil = require('gulp-util'); 

gulp.task('jekyll', function(){ 
exec('jekyll build', function(err, stdout, stderr) { 
    console.log(stdout); 
}); 
}); 

Here's a post about the differences

相关问题