【问题标题】:Running jekyll as a child process in Gulp/Node在 Gulp/Node 中将 jekyll 作为子进程运行
【发布时间】:2014-02-18 14:31:25
【问题描述】:

我正在尝试使用 Gulp.js 构建一个 jekyll 站点。我读到我不应该在this question 中使用插件。

我一直在按照建议使用子进程进行调查,但我不断收到错误消息:

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)

这是我的 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']);

我做错了什么?我在节点 0.10.25,Win 7 上。

编辑 我以前有一个围绕 ENOENT 错误的谷歌。检查了我的路径,Ruby 在那里,我可以从命令行运行 jekyll。还是不开心。

【问题讨论】:

    标签: node.js jekyll gulp


    【解决方案1】:

    我也遇到了这个问题,找到了使用 spawn 的答案。

    问题在于 Node 如何在 Windows 上找到可执行文件。有关更多详细信息,请查看此答案:

    https://stackoverflow.com/a/17537559

    简而言之,将 spawn('jekyll', ['build']) 更改为 spawn('jekyll.bat', ['build']) 以使 spawn 工作。

    【讨论】:

    • SpikeMeister,我刚刚通过谷歌搜索我自己的问题看到了你的答案。抱歉没有早点接受和投票。您知道 .bat 修复程序是否适用于 Mac/Unix 机器吗?让我开心!
    • 回复我之前的评论。您可以根据操作系统设置命令:var jekyll = process.platform === "win32" ? "jekyll.bat" : "jekyll"; 然后运行:spawn(jekyll' ['build'])
    【解决方案2】:

    所以我最终改用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);
    });
    });
    

    Here's a post about the differences

    【讨论】:

      【解决方案3】:

      几年后,您现在可以使用cross-spawn,它处理节点的spawn 的跨平台问题。它是 Node 的 spawn 的直接替代品。

      安装到您的项目中

      npm install cross-spawn
      

      然后添加

      const spawn = require('cross-spawn');
      

      到你的脚本。

      然后在你的 gulp 脚本中正常使用:

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

      如果您在非 gulp 脚本中使用它:

      var jekyll = spawn('bundle exec jekyll build');
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-10-17
        • 1970-01-01
        • 2016-03-28
        • 2014-12-07
        • 2013-04-28
        • 1970-01-01
        • 2019-05-08
        • 2019-01-14
        相关资源
        最近更新 更多