使用Jekyll与Gulp和Livereload

lem*_*emp 2 jekyll livereload gulp

这个问题暗示了我如何与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
    });
});
Run Code Online (Sandbox Code Playgroud)

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

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