2

この質問は、Gulp で Jekyll を実行する方法を示唆しています。

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

2 に答える 2

6

gulp-livereloadgulp.src()または他のビニール入力ソースを介してパイプされたファイルが必要です。この場合、 Jekyll が書き込むファイルを監視するように追加gulp-watchし、それに基づいてリロードすることをお勧めします。

次のようになります。

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 に答える