Gulp dest.on不是函数

时间:2016-07-08 00:45:55

标签: gulp

我在使用gulp-imagemin 优化图片的gulp任务中遇到了令人讨厌的 dest.on错误。我在这里进行了一些不常见的设置,使用gulp-load-plugins以使我的所有任务与实际的gulpfile分开。

关于有问题的任务,我要求:

"gulp-imagemin": "^3.0.1",
"gulp-util": "^3.0.7",

并且想法是在为每个流完成图像时记录消息,gulp.dest()似乎不喜欢我的gutil.log()方法:

module.exports = function(gulp, plugins, config) {

  return function()
  {
    var stream =
        // Optimize Images for Version A //
        gulp.src(config.assetsDir + '/a/images/*')
            .pipe(plugins.util.log('Hello'))
            .pipe(plugins.imagemin({
                progressive: true,
                optimizationLevel: 7,
                svgoPlugins: [{removeViewBox: false}],
                use: [plugins.pngquant()]
            }))
            .pipe(gulp.dest(config.publicDir + 'images/a/'))

        // Optimize Images for Version B //
        gulp.src(config.assetsDir + '/b/images/*')
            .pipe(plugins.imagemin({
                progressive: true,
                optimizationLevel: 7,
                svgoPlugins: [{removeViewBox: false}],
                use: [plugins.pngquant()]
            }))
            .pipe(gulp.dest(config.publicDir + 'images/b/'))
            .pipe(plugins.util.log("Task Done!"))
  }
};

问题似乎在那里的最后一行,我通过我的插件对象发送gutil的依赖项,然后引用它并调用它的log()方法。没有日志就可以正常工作,我在这里缺少什么?

1 个答案:

答案 0 :(得分:2)

gulp.dest()之类的内容和imagemin()等插件返回stream.Transform objects。只有您可以传递给.pipe()的人。

另一方面,

gutil.log()不会返回stream.Transform,因此无法传递给.pipe()

如果您仍想在流中使用它,则必须侦听node.js streams所公开的事件之一,例如'data' event(为每个文件调用):< / p>

gulp.src(config.assetsDir + '/a/images/*')
  .on('data', function() { plugins.util.log('Hello'); })

'end' event(在完成流时调用):

  .pipe(gulp.dest(config.publicDir + 'images/b/'))
  .on('end', function() { plugins.util.log("Task Done!") });