Last active
December 20, 2018 19:10
-
-
Save treykane/58d5b38a5cd94d2064ae to your computer and use it in GitHub Desktop.
My basic gulp file
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// npm install gulp | |
//---- TODO'S ----// | |
// TODO: smarter linting | |
// Include gulp | |
var gulp = require('gulp'); | |
// Include Our Plugins | |
var jshint = require('gulp-jshint'); | |
var sass = require('gulp-sass'); | |
var uglify = require('gulp-uglify'); | |
var rename = require('gulp-rename'); | |
var minifyCss = require('gulp-minify-css'); | |
var sourcemaps = require('gulp-sourcemaps'); | |
var autoprefixer = require('gulp-autoprefixer'); | |
var plumber = require('gulp-plumber'); | |
var gutil = require('gulp-util'); | |
var notify = require('gulp-notify'); | |
var include = require('gulp-include'); | |
var babel = require('gulp-babel'); | |
var changed = require('gulp-changed'); | |
var imagemin = require('gulp-imagemin'); | |
var jpegOptim = require('imagemin-jpegoptim'); | |
var pngQuant = require('imagemin-pngquant'); | |
// File Path VARs | |
// These can be an array if you want to use multiple sources | |
var jsSrcDir = 'assets/src/js/' // source directory | |
var jsSrc = jsSrcDir + 'project.js' // source | |
var jsDestName = 'project.min.js' // destination file name | |
var jsDest = 'assets/dist/js/' // destination | |
var scssSrcDir = 'assets/src/scss/' // source directory | |
var scssSrc = scssSrcDir + 'project.scss' // source | |
var scssDestName = 'style.min.css' // destination file name | |
var scssDest = 'assets/dist/css/' // desitnation | |
var imageSrc = 'assets/src/images' // source | |
var imageDest = 'assets/dist/images' // desitnation | |
// Gulp-Notify Error Handler | |
var onError = function(err) { | |
notify.onError({ | |
title: 'Gulp', | |
subtitle: 'Error:', | |
message: '<%= error.message %>', | |
sound: 'Sosumi', | |
})(err); | |
this.emit('end'); // Reset Gulp Watch | |
}; | |
var compileSass = function() { | |
gulp | |
.src(scssSrc) // this all gets organized into this file | |
.pipe(plumber({ errorHandler: onError })) | |
.pipe(sourcemaps.init()) // start making src maps | |
.pipe(sass()) // compile scss | |
.pipe( | |
autoprefixer({ | |
// autoprefixer | |
browsers: ['last 2 versions'], | |
cascade: false, | |
}), | |
) | |
.pipe(minifyCss()) // minify | |
.pipe(rename(scssDestName)) // create file | |
.pipe(notify('Compiled SCSS')) | |
.pipe(sourcemaps.write('.')) // finish src maps | |
.pipe(gulp.dest(scssDest)); | |
}; | |
var compileJs = function() { | |
gulp | |
.src(jsSrc) // get project.js | |
.pipe(plumber({ errorHandler: onError })) | |
.pipe(include({ hardFail: true })) // Hard fail on Errors please | |
.pipe( | |
babel({ | |
compact: false, | |
presets: ['@babel/env'], | |
}), | |
) | |
.pipe(notify('Transpiled ES6')) | |
.pipe(sourcemaps.init()) // start src maps | |
.pipe(rename(jsDestName)) // minify the concat file | |
.pipe(uglify()) // minify | |
.on('error', function(err) { | |
gutil.log(gutil.colors.red('[Error]'), err.toString()); | |
}) // Error reporting as needed | |
.pipe(notify('Compiled JS')) | |
.pipe(gulp.dest(jsDest)) | |
.pipe(sourcemaps.write('.')) // finish src maps | |
.pipe(gulp.dest(jsDest)); | |
}; | |
/** | |
* Compress Images (jpeg, jpg, png, svg) | |
* @param {String} src - Source files | |
* @param {String} dist - Directory to output to | |
*/ | |
var compressImages = function(src, dist) { | |
var extensions = 'png,jpg,jpeg,svg'; | |
var imageQuality = 60; | |
src += '/**/*.{' + extensions + '}'; | |
gulp | |
.src(src) | |
.pipe(changed(dist)) | |
.pipe( | |
imagemin({ | |
verbose: true, | |
svgoPlugins: [ | |
{ cleanupIDs: false }, | |
{ removeUselessDefs: false }, | |
{ removeViewBox: true }, | |
{ convertPathData: false }, | |
{ margePaths: false }, | |
{ removeXMLProcInst: false }, | |
], | |
use: [pngQuant({ quality: imageQuality }), jpegOptim({ max: imageQuality })], | |
}), | |
) | |
.pipe(gulp.dest(dist)); | |
}; | |
// Lint Task | |
// note: really lame linting | |
gulp.task('lint', function() { | |
return gulp | |
.src(jsWatch) | |
.pipe(jshint()) | |
.pipe(jshint.reporter('default')); | |
}); | |
// Concatenate Specified Scripts, Minify JS, Source Map JS | |
// Note: Sometimes the JS loading order matters, this is to keep control of that. | |
gulp.task('js', function() { | |
compileJs(); | |
}); | |
// Compile Sass, Generate Source Maps, Auto-Prefix, Minify CSS | |
gulp.task('scss', function() { | |
compileSass(); | |
}); | |
/** | |
* Task: smash | |
* @Desc: Compress Image Files (jpeg, jpg, png, svg) | |
*/ | |
gulp.task('smash', function() { | |
compressImages(imageSrc, imageDest); | |
}); | |
/** | |
* Task: Build | |
* @Desc: Compile JS/SCSS files | |
*/ | |
gulp.task('build', function() { | |
// Compile Theme Js/Scss | |
compileSass(); | |
compileJs(); | |
compressImages(); | |
}); | |
// Watch Files For Changes | |
gulp.task('watch', function() { | |
//gulp.watch('assets/src/js/*.js', ['lint']); | |
gulp.watch( | |
[ | |
jsSrcDir + '**/*.js', // Watch all the js files | |
jsSrc, // our main file | |
'!' + jsDest + '*.js', // DO NOT watch any minified files (this creates a loop) | |
jsSrcDir + 'tagular-events.js' // Additional | |
], | |
['js'], | |
); | |
gulp.watch( | |
[ | |
scssSrcDir + '**/*.scss', | |
scssSrc | |
], | |
['scss']); | |
}); | |
// Default Task | |
gulp.task('default', ['scss', 'js', 'watch']); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Updated with a more modern workflow.