一尘不染

Gulps gulp.watch是否未触发新文件或已删除文件?

node.js

在全局匹配中编辑文件时,以下Gulpjs任务可以正常工作:

// watch task.
gulp.task('watch', ['build'], function () {
    gulp.watch(src + '/js/**/*.js', ['scripts']);
    gulp.watch(src + '/img//**/*.{jpg,jpeg,png,gif}', ['copy:images']);
    gulp.watch(src + '/less/*.less', ['styles']);
    gulp.watch(src + '/templates/**/*.{swig,json}', ['html']);
});

// build task.
gulp.task('build', ['clean'], function() {
    return gulp.start('copy', 'scripts', 'less', 'htmlmin');
});

但是,对于新文件或已删除文件,它不起作用(不会触发)。有什么我想念的吗?

编辑 :即使使用grunt-watch插件,它似乎也不起作用:

gulp.task('scripts', function() {
    return streamqueue(
        { objectMode: true },
        gulp.src([
            vendor + '/jquery/dist/jquery.min.js',
            vendor + '/bootstrap/dist/js/bootstrap.min.js'
        ]),
        gulp.src([
            src + '/js/**/*.js'
        ]).pipe(plugins.uglify())
    )
    .pipe(plugins.concat(pkg.name + '.min.js'))
    .pipe(gulp.dest(dest + '/js/'));
});

gulp.task('watch', ['build'], function () {
    plugins.watch({glob: src + '/js/**/*.js'}, function () {
        gulp.start('scripts');
    });
});

编辑 :解决了,就是这个问题。以./(的值为src)开头的电子邮件似乎无法在ATM上正常工作。


阅读 258

收藏
2020-07-07

共1个答案

一尘不染

编辑: 显然gulp.watch现在可以处理新文件或删除的文件。询问问题时没有。

我剩下的答案仍然gulp- watch是:通常是一个更好的解决方案,因为它使您仅可以对已修改的文件执行特定的操作,而gulp.watch仅允许您运行完整的任务。对于合理大小的项目,这将很快变得太慢而无法使用。


您什么都不会错过。gulp.watch不适用于新文件或删除的文件。这是专为简单项目设计的简单解决方案。

要查看可以查找新文件的文件,请使用功能更强大gulp-watchplugin。用法如下所示:

var watch = require('gulp-watch');

// in a task
watch({glob: <<glob or array of globs>> })
        .pipe( << add per-file tasks here>> );

// if you'd rather rerun the whole task, you can do this:
watch({glob: <<glob or array of globs>>}, function() {
    gulp.start( <<task name>> );
});

就个人而言,我建议第一种选择。这样可以加快每个文件的处理速度。只要您不连接任何文件,它在使用livereload进行开发的过程中就可以很好地工作。

您可以使用我的lazypipe,也可以仅使用函数来包装流,stream- combiner如下所示:

var combine = require('stream-combiner');

function scriptsPipeline() {
    return combine(coffeeescript(), uglify(), gulp.dest('/path/to/dest'));
}

watch({glob: 'src/scripts/**/*.js' })
        .pipe(scriptsPipeline());

更新 2014年10月15日

如下面的@pkyeck所指出的,显然1.0版对gulp-watch格式进行了稍微的更改,因此上述示例现在应为:

var watch = require('gulp-watch');

// in a task
watch(<<glob or array of globs>>)
        .pipe( << add per-file tasks here>> );

// if you'd rather rerun the whole task, you can do this:
watch(<<glob or array of globs>>, function() {
    gulp.start( <<task name>> );
});

var combine = require('stream-combiner');

function scriptsPipeline() {
    return combine(coffeeescript(), uglify(), gulp.dest('/path/to/dest'));
}

watch('src/scripts/**/*.js')
        .pipe(scriptsPipeline());
2020-07-07