2014-02-19 97 views
2

This question暗示了我如何用Gulp運行Jekyll。使用Jekyll與Gulp和Livereload

它工作正常,但我無法觸發livereload(但它運行沒有錯誤)。

我節點的知識是有限的,所以我可能失去了一些東西......

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 
    }); 
}); 

回答

6

gulp-livereload需要通過文件或gulp.src()其他vinyl輸入源管道輸送進去。在這種情況下,我建議您使用adding 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)); 
    }); 
}); 

只要傑奇只有重寫修改過的文件,這將工作完美。但是,如果它覆蓋所有內容,那麼livereload只會在每次更改時刷新瀏覽器。

+0

它的工作原理,但傑奇替換所有的文件,所以livereload被觸發每個。有沒有辦法只觸發一次? – lemp

+0

是的,讓我更新答案。 – OverZealous

+0

我更新了在批處理模式下使用'gulp-watch'的答案。我在配置'watch'的方式上也有一個錯誤,我對此表示歉意。它需要指定爲'{glob:<>}'的輸入文件。 – OverZealous

0

您可以在構建結束觸發livereload,使其重新加載頁面,所以你不會有多個刷新: