我在使用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()
方法。没有日志就可以正常工作,我在这里缺少什么?
答案 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!") });