Skip to content

Instantly share code, notes, and snippets.

@CuddleBunny
Created September 30, 2015 15:44
Show Gist options
  • Save CuddleBunny/afdaefb38afc14ec9a5a to your computer and use it in GitHub Desktop.
Save CuddleBunny/afdaefb38afc14ec9a5a to your computer and use it in GitHub Desktop.
Modular Gulp task builder.
/// <binding AfterBuild='build' />
var gulp = require('gulp'),
bower = require('main-bower-files'),
clean = require('gulp-clean'),
less = require('gulp-less'),
minifyCSS = require('gulp-minify-css'),
rename = require('gulp-rename'),
typescript = require('gulp-tsc'),
uglify = require('gulp-uglify');
var config = {
development: true,
modules: [
'cms',
'site'
],
cms: {
srcRoot: './CMS/',
destRoot: './wwwroot/cms/',
scripts: {
src: 'App/*.ts',
dest: 'app'
},
styles: {
src: 'Styles/*.less',
dest: 'css'
}
},
site: {
destRoot: './wwwroot',
scripts: {
src: './Scripts/*.ts',
dest: 'app'
},
styles: {
src: './Styles/*.less',
dest: 'css'
}
},
components: {
src: './bower_components/',
dest: './wwwroot/lib/'
}
}
var buildTasks = ['copy-components'];
var cleanTasks = ['clean-components'];
// Bower Components
gulp.task('copy-components', ['clean-components'], function () {
return gulp.src(bower(), { base: config.components.src }).pipe(gulp.dest(config.components.dest));
});
gulp.task('clean-components', function () {
return gulp.src(config.components.dest, { read: false }).pipe(clean({ force: true }));
});
// Pipeline Builders
function ScriptsTaskBuilder(module) {
var src = config[module].srcRoot + config[module].scripts.src;
var dest = config[module].destRoot + config[module].scripts.dest;
gulp.task(module + '-clean-scripts', function () {
return gulp.src(dest, { read: false }).pipe(clean({ force: true }));
});
gulp.task(module + '-build-scripts', [module + '-clean-scripts'], function () {
var stream = gulp.src(src)
.pipe(typescript({
sourceMap: config.development,
emitError: false,
outDir: dest
}));
if (!config.development)
stream.pipe(uglify());
return stream.pipe(gulp.dest(dest));
});
buildTasks.push(module + '-build-scripts');
cleanTasks.push(module + '-clean-scripts');
}
function StylesTaskBuilder(module) {
var src = config[module].srcRoot + config[module].styles.src;
var dest = config[module].destRoot + config[module].styles.dest;
gulp.task(module + '-clean-styles', function () {
return gulp.src(dest, { read: false }).pipe(clean({ force: true }));
});
gulp.task(module + '-build-styles', [module + '-clean-styles'], function () {
var stream = gulp.src(src)
.pipe(less());
if (!config.development)
stream.pipe(minifyCSS({ compatibility: 'ie8' }));
return stream.pipe(gulp.dest(dest));
});
buildTasks.push(module + '-build-styles');
cleanTasks.push(module + '-clean-styles');
}
// Tasks
for (var i in config.modules) {
ScriptsTaskBuilder(config.modules[i]);
StylesTaskBuilder(config.modules[i]);
}
gulp.task('build', buildTasks, function () {
// Add custom build logic here:
});
gulp.task('clean', cleanTasks, function () {
// Add custom clean logic here:
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment