rump-images
Version:
Rump piece for handling images
47 lines (41 loc) • 1.63 kB
JavaScript
import gulp, {dest, src, tasks} from 'gulp'
import changed from 'gulp-changed'
import clone from 'gulp-clone'
import filter from 'gulp-filter'
import gm from 'gulp-gm'
import imagemin from 'gulp-imagemin'
import plumber from 'gulp-plumber'
import rename from 'gulp-rename'
import rump from 'rump'
import {noop} from 'gulp-util'
import {join} from 'path'
const name = ::rump.taskName,
task = ::gulp.task,
{configs} = rump
task(name('build:images'), () => {
const source = join(configs.main.paths.source.root,
configs.main.paths.source.images,
configs.main.globs.build.images),
destination = join(rump.configs.main.paths.destination.root,
rump.configs.main.paths.destination.images),
{minify} = configs.main.images
let stream = src([source].concat(configs.main.globs.global))
.pipe((rump.configs.watch ? plumber : noop)())
.pipe((rump.configs.watch ? changed : noop)(destination))
// Clone retina images if available
if(configs.main.images.retina) {
const cloneSink = clone.sink(),
retinaFilter = filter(['**/*@2x.*'], {restore: true})
stream = stream
.pipe(retinaFilter)
.pipe(cloneSink)
.pipe(gm((gmfile, done) => done(null, gmfile.resize('50%', '50%'))))
.pipe(rename(path => path.basename = path.basename.replace(/@2x$/, '')))
.pipe(retinaFilter.restore)
.pipe(cloneSink.tap())
}
return stream
.pipe((minify ? imagemin : noop)(configs.main.images.imagemin))
.pipe(dest(destination))
})
tasks[name('build')].dep.push(name('build:images'))