Gulp 运行“大口表”时的无限循环

Gulp 运行“大口表”时的无限循环,gulp,jekyll,gulp-watch,browserstack,Gulp,Jekyll,Gulp Watch,Browserstack,我有一个Jekyll站点,它使用Gulp编译Jekyll文件,还有其他任务,比如编译我的sass、js文件和运行Browsersync。我正在迁移到Gulp 4.0,因此一直在更新我的gulpfile.js以反映这一点……然而,当我在命令行中运行“Gulp”并更新一个Jekyll文件时,构建现在会无限循环。这仅在更新Jekyll文件或js文件时发生,而不是在更新sass文件时发生。这是我的密码: var gulp = require('gulp'), browserSync =

我有一个Jekyll站点,它使用Gulp编译Jekyll文件,还有其他任务,比如编译我的sass、js文件和运行Browsersync。我正在迁移到Gulp 4.0,因此一直在更新我的gulpfile.js以反映这一点……然而,当我在命令行中运行“Gulp”并更新一个Jekyll文件时,构建现在会无限循环。这仅在更新Jekyll文件或js文件时发生,而不是在更新sass文件时发生。这是我的密码:

    var gulp = require('gulp'),
    browserSync = require('browser-sync').create(),
    sass = require('gulp-sass'),
    babel = require('gulp-babel'),
    autoprefixer = require('gulp-autoprefixer'),
    rename = require('gulp-rename'),
    concat = require('gulp-concat'),
    uglify = require('gulp-uglify'),
    svgmin = require('gulp-svgmin'),
    sourcemaps = require('gulp-sourcemaps'),
    cp = require('child_process'),
    jekyll = process.platform === 'win32' ? 'jekyll.bat' : 'jekyll';



// =======================================================================
// Browser Sync
// =======================================================================

gulp.task('browser-sync', function(done)
{
    browserSync.init({
        server: {
             baseDir: "_site"
        },
        port: 3004,
        open: false
    });

    done();
});

gulp.task('browser-sync-reload', function(done)
{
    browserSync.reload();
    done();
});



// =======================================================================
// SASS
// =======================================================================

var sassOptions = {
    includePaths: ['scss'],
    errLogToConsole: true,
    outputStyle: 'compressed',
    //sourceComments: 'map'
};

//Auto prefixer options
var autoPrefixerOptions = {
    browsers: ['last 15 versions', '> 1%', 'ie 8', 'ie 7']
};

var styleInput = [
    '_sass/**/_*.scss',
    '_sass/site.scss'
];

gulp.task('sass-style', function()
{
    return gulp.src(styleInput)
        .pipe(sass(sassOptions).on('error', sass.logError))
        .pipe(autoprefixer(autoPrefixerOptions, { cascade: true }))
        .pipe(rename('styles.css'))
        .pipe(gulp.dest('_site/css'))
        .pipe(gulp.dest('css'))
        .pipe(browserSync.stream());
});



// =======================================================================
// JS
// =======================================================================

var jsInput = [
    'js/libs/**/*.js',
    'js/site.js'
];

//Compile js to older browser compatible output
gulp.task('babel-js-min', function() {
    return gulp.src(jsInput)
        .pipe(sourcemaps.init())
        .pipe(babel({
            presets: ['@babel/env']
        }))
        .pipe(concat('site.js'))
        .pipe(uglify())
        .pipe(rename('scripts.min.js'))
        .pipe(sourcemaps.write('.'))
        .pipe(gulp.dest('_site/js/dist'))
        .pipe(gulp.dest('js/dist'))
        .pipe(browserSync.stream());
});

//Compile js to older browser compatible output
gulp.task('babel-js', function() {
    return gulp.src(jsInput)
        .pipe(sourcemaps.init())
        .pipe(babel({
            presets: ['@babel/env']
        }))
        .pipe(concat('site.js'))
        .pipe(rename('scripts.js'))
        .pipe(sourcemaps.write('.'))
        .pipe(gulp.dest('_site/js/dist'))
        .pipe(gulp.dest('js/dist'))
        .pipe(browserSync.stream());
});



// =======================================================================
// SVGs
// =======================================================================

function onError(error)
{
    console.log(error);
    this.emit('end');
}

var svgInput = [
    '_includes/svgs/src/**/*'
];

gulp.task('svgmin', function()
{
    return gulp.src(svgInput)
        .pipe(svgmin())
        .on('error', onError)
        .pipe(gulp.dest('./_includes/svgs/dist'));
});



// =======================================================================
// Jekyll
// =======================================================================

var jekyllFiles = [
    '_includes/*.html',
    '_layouts/*.html',
    '**/*.md'
];


gulp.task('jekyll-build', function(done)
{
    return cp.spawn("bundle", ["exec", "jekyll", "build"], { stdio: "inherit" }).on('close', done);
});



// =======================================================================
// Watch
// =======================================================================

gulp.task('watch', function()
{
    gulp.watch(styleInput, gulp.series('sass-style'));
    gulp.watch(jsInput, gulp.series('babel-js-min'));
    gulp.watch(jsInput, gulp.series('babel-js'));
    gulp.watch(svgInput, gulp.series('svgmin'));
    gulp.watch(jekyllFiles, gulp.series('jekyll-build', 'browser-sync-reload'));
});



// =======================================================================
// Define the default task and add the watch task to it
// =======================================================================

gulp.task('default', gulp.parallel('watch', 'browser-sync'));

如果您对此有任何帮助,我们将不胜感激。

我为任何有相同问题的人解决了这个问题……我的Jekyll子进程导致了无限循环(仅在编辑Jekyll文件时)。将其更新为以下内容成功:

return cp.spawn(jekyll, ['build', '--incremental', '--drafts'], {stdio: "inherit"}).on('close', done);