我如何才能 运行 一个 gulp 任务只对新的和改变的文件?

How can I run a gulp task only on new and changed files?

我正在尝试使用 gulp-imagemin 来优化我项目中的图像。但是我只想 运行 imagemin 仅当添加新图像或更改当前图像时。我只想 运行 它只在 new/changed 图像上。

有人建议使用更改并添加这样的事件:

gulp.watch( [ 'myfolder/**/*.png', 'myfolder/**/*.svg' ] )
    .on( "change", function(file){
        console.log("change");
        // do imagemin stuff here
    } );

但是 "change" 事件没有被调用。我还尝试了 "add" 事件,结果相同。

我对 gulp 的了解仍然有限,我不知道该怎么做。那么我如何才能 运行 imagemin 仅在新的/更改的图像上?

我想出了一个方法让事情正常进行。

gulp.watch( [ 'myfolder/**/*.png', 'myfolder/**/*.svg' ], function (event) {
    switch (event.type)
    {
        case 'added':
        case 'changed':
            gulp.src( event.path )
                .pipe( imagemin({
                    optimizationLevel: 5,
                    progressive: true,
                    svgoPlugins: [{removeViewBox: false}],
                    use: [pngquant()]
                }) )
                .pipe( gulp.dest( strImgDest ) );
            break;
    }
} );

这是最好的方法吗?我不知道。我的问题几乎没有受到社区的关注。但它确实对我有用。我希望这对将来的人有所帮助。