UNPKG

boilerplate.js

Version:

Development Tools

93 lines (70 loc) 3.12 kB
function sprites(input, fileName) { const fs = require('fs-extra'); const imagemin = require('gulp-imagemin'); var spritesmith = $REQUIRE('gulp.spritesmith'); var output = path.resolve(config.css.dir + '/sprites/'); var cssFilePath = path.resolve(`${output}/${fileName}`); fs.ensureDirSync(output); // console.log(input); // console.log(output); var spriteData = gulp.src(input) .pipe(spritesmith({ imgName: `${fileName}.png`, cssName: `${fileName}.css` })) .pipe( gulp.dest(output) ); spriteData.on('end', () => { fs.renameSync( `${cssFilePath}.css`,`${cssFilePath}.scss` ); console.log('Updating _cli.scss...'); Prepend.sass('_cli.scss', `@import "sprites/${fileName}.scss";`); var cssFile = (fs.readFileSync(cssFilePath + '.scss')).toString(); var cssFileData = cssFile.replace(/icon-/g, `${fileName}-`); cssFileData = cssFileData.replace(new RegExp(`${fileName}.png`, 'g'), `sprites/${fileName}.png`); fs.writeFileSync(`${cssFilePath}.scss`, cssFileData); var compressImage = gulp.src( path.resolve(`${output}/${fileName}.png`) ) .pipe(imagemin([ imagemin.gifsicle({interlaced: true}), imagemin.jpegtran({progressive: true}), imagemin.optipng({optimizationLevel: 3}), imagemin.svgo({ plugins: [ {removeViewBox: true}, {cleanupIDs: false} ] }) ],{ verbose: true })) .pipe(gulp.dest( output )); compressImage.on('end', () => { var dest = path.resolve(`${config.css.output}/sprites`); fs.ensureDirSync(dest); fs.copyFileSync(cssFilePath + '.png', `${dest}/${fileName}.png`); console.log(`Generated ${cssFilePath}.scss`.grey); console.log(`Moved ${fileName}.png to public folder`.grey); }); }); } function watchSprites(config) { require('colors'); var current = path.resolve(config.sprites); var glob = path.resolve(config.sprites + '/**/*'); console.log('Watching '.cyan + config.sprites.cyan); watch((glob), null).on('add', (file) => { console.log(`Added ${file}`.grey); clearTimeout(this.timeout); this.timeout = setTimeout(run, 1000, { 'file': file, 'add': true }); }).on('unlink', (file) => { console.log(`Removed ${file}`.grey); clearTimeout(this.timeout); this.timeout = setTimeout(run, 1000, { 'file': file, 'add': false }); }); function run(data) { console.log('Generating Sprites...'.green); var dir = path.parse(data.file).dir; var fileName = (dir.split(/[\/\\]+/)).pop(); sprites(path.resolve(dir + '/*'), toCamelCase(fileName.toLowerCase())); } } module.exports = { sprites, watchSprites };