在Gulp/Node中将jekyll作为子进程运行

mat*_*eta 12 jekyll node.js gulp

我正在尝试使用Gulp.js构建一个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)
Run Code Online (Sandbox Code Playgroud)

这是我的gulp文件:

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']);
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?我在Node 0.10.25,Win 7上.

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

and*_*ewh 14

我也有这个问题,并找到了使用spawn的答案.

问题在于Node如何在Windows上查找可执行文件.有关详细信息,请查看以下答案:

/sf/answers/1227629161/

总之,改变spawn('jekyll', ['build'])spawn('jekyll.bat', ['build'])以获得重生的工作.

  • 重新我之前的评论.您可以根据操作系统设置命令:`var jekyll = process.platform ==="win32"?"jekyll.bat":"jekyll";`然后运行:`spawn(jekyll'['build'])` (2认同)

mat*_*eta 9

所以我最终使用了exec.这是我的gulp文件:

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);
});
});
Run Code Online (Sandbox Code Playgroud)

这是关于差异的帖子