2

这个问题暗示了我如何使用 Gulp 运行 Jekyll。

它工作正常,除了我无法触发 livereload (但它运行没有错误)。

我对Node的了解有限,所以我可能遗漏了一些东西......

var gulp = require('gulp');
var refresh = require('gulp-livereload');
var lr = require('tiny-lr');
var server = lr();

gulp.task('jw', function(){
    var spawn = require('child_process').spawn,
        j     = spawn('jekyll', ['-w', 'build']);

    j.stdout.on('data', function (data) {
        console.log('stdout: ' + data); // works fine
        refresh(server); // doesn’t trigger
    });
});
4

2 回答 2

6

gulp-livereload需要通过管道gulp.src()或其他乙烯基输入源输入的文件。在这种情况下,我建议添加gulp-watch以监视 Jekyll 写入的文件,并在此基础上重新加载。

它看起来像这样:

var gulp = require('gulp');
var refresh = require('gulp-livereload');
var watch = require('gulp-watch');
var lr = require('tiny-lr');
var server = lr();

gulp.task('jw', function(){
    var spawn = require('child_process').spawn,
        j     = spawn('jekyll', ['-w', 'build']);

    j.stdout.on('data', function (data) {
        console.log('stdout: ' + data); // works fine
    });

    watch({glob: '/glob/path/to/jekyll/output'}, function(files) {
        // update files in batch mode
        return files.pipe(refresh(server));
    });
});

只要 Jekyll 只重写更改的文件,这将完美地工作。但是,如果它覆盖了所有内容,那么 livereload 只会在每次更改时刷新浏览器。

于 2014-02-19T14:37:45.930 回答
0

您可以在构建结束时触发 livereload ,使其重新加载页面,这样您就不会多次刷新:

于 2016-07-29T13:29:07.517 回答