Last active
October 26, 2016 18:15
-
-
Save soenkekluth/9789630 to your computer and use it in GitHub Desktop.
gulpfile.js
This file contains hidden or 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
'use strict'; | |
/******************************************************************************* | |
DEPENDENCIES | |
*******************************************************************************/ | |
// Load plugins fails with some plugins! | |
// var $ = require('gulp-load-plugins')(); | |
// instead use fashion style: | |
var gulp = require('gulp'), | |
gutil = require('gulp-util'), | |
sass = require('gulp-sass'), | |
compass = require('gulp-compass'), | |
stylus = require('gulp-stylus'), | |
uglify = require('gulp-uglify'), | |
jshint = require('gulp-jshint'), | |
rename = require('gulp-rename'), | |
concat = require('gulp-concat'), | |
plumber = require('gulp-plumber'), | |
notify = require('gulp-notify'), | |
jade = require('gulp-jade'), | |
stylish = require('jshint-stylish'), | |
uglify = require('gulp-uglify'), | |
browserSync = require('browser-sync'), | |
autoprefixer = require('gulp-autoprefixer'), | |
minifyCSS = require('gulp-minify-css'), | |
minifyHTML = require('gulp-minify-html'), | |
imagemin = require('gulp-imagemin'), | |
clean = require('gulp-clean'), | |
connect = require('gulp-connect'), | |
browserify = require('gulp-browserify'), | |
rjs = require('gulp-requirejs'), | |
cache = require('gulp-cache'), | |
jeet = require("jeet"), | |
size = require('gulp-size'); | |
/******************************************************************************* | |
FILE / PATH / SHIM CONFIG | |
*******************************************************************************/ | |
var folders = { | |
src: './app', | |
dest: './public', | |
bower: './app/assets/components', | |
tmp: './.tmp', | |
sassIncludePaths: ['app/assets/components'], | |
componentsPath: 'app/assets/components' | |
}; | |
var config = { | |
shim: { | |
jquery: { | |
path: folders.bower + '/jquery/dist/jquery.js', | |
exports: '$' | |
} | |
}, | |
autoprefixer: { | |
def: [ | |
'last 2 version', | |
'> 1%', | |
'safari 5', | |
'ie 8', | |
'ie 9', | |
'opera 12.1', | |
'ios 6', | |
'android 4' | |
], | |
mobile: [ | |
'ios 6', | |
'android 4' | |
] | |
} | |
}; | |
/******************************************************************************* | |
CLEAN DEST TASK | |
*******************************************************************************/ | |
gulp.task('clean', function() { | |
return gulp.src([folders.dest + '/assets/css', folders.dest + '/assets/js', folders.dest + '/assets/images'], { | |
read: false | |
}) | |
.pipe(clean()); | |
}); | |
/******************************************************************************* | |
CSS TASK | |
*******************************************************************************/ | |
gulp.task('sass', function() { | |
return gulp.src(folders.src + '/assets/scss/style.scss', { read: false }) | |
.pipe(plumber()) | |
.pipe(sass({ | |
includePaths: folders.sassIncludePaths, | |
outputStyle: 'expanded' | |
})) | |
.pipe(autoprefixer.apply(config.autoprefixer.def)) | |
.pipe(gulp.dest(folders.tmp + '/assets/css')) | |
.pipe(size()); | |
}); | |
gulp.task('compass', function() { | |
return gulp.src(folders.src + '/assets/scss/*.{scss,sass}') | |
.pipe(plumber()) | |
.pipe(compass({ | |
// css: folders.src + '/assets/css', | |
css: folders.tmp + '/assets/css', | |
sass: folders.src + '/assets/scss', | |
image: folders.src + '/assets/images', | |
javascripts: folders.src + '/assets/js', | |
fonts: folders.src + '/assets/fonts', | |
import_path: folders.sassIncludePaths | |
/*, | |
require: ['susy', 'modular-scale']*/ | |
})) | |
.pipe(autoprefixer.apply(config.autoprefixer.def)) | |
.pipe(gulp.dest(folders.tmp + '/assets/css')); | |
}); | |
gulp.task('stylus', function() { | |
gulp.src(folders.src + '/assets/stylus/*.styl') | |
.pipe(plumber()) | |
.pipe(stylus({ | |
// set:['compress','linenos'], | |
use: ['nib', 'jeet'], | |
import: ['nib', 'jeet'] | |
})) | |
.pipe(autoprefixer.apply(config.autoprefixer.def)) | |
.pipe(gulp.dest(folders.tmp + '/assets/css')); | |
}); | |
/******************************************************************************* | |
JAVASCRIPT TASK | |
*******************************************************************************/ | |
gulp.task('jshint', function() { | |
return gulp.src(folders.src + 'assets/js/**/*.js') | |
.pipe(jshint('.jshintrc')) | |
.pipe(jshint.reporter(stylish)); | |
}); | |
gulp.task('js', function() { | |
return gulp.src(folders.src + '/assets/js/main.js') | |
.pipe(plumber()) | |
.pipe(browserify({ | |
insertGlobals: false, | |
debug: true, | |
shim: config.shim | |
})) | |
.pipe(rename('app.js')) | |
.pipe(gulp.dest(folders.tmp + '/assets/js')) | |
.pipe(size()); | |
}); | |
// as an example for requirejs: | |
gulp.task('requirejs', function() { | |
rjs({ | |
name: 'main', | |
baseUrl: folders.src + '/assets/js', | |
mainConfigFile: folders.src + '/assets/js/main.js', | |
out: 'app.js', | |
optimize: 'none', | |
generateSourceMaps: true, | |
preserveLicenseComments: false, | |
useStrict: true, | |
wrap: false | |
}) | |
.pipe(gulp.dest(folders.dest + '/assets/js')); | |
return gulp.src([folders.componentsPath + '/almond/almond.js', folders.dest + '/assets/js/app.js'], { | |
read: false | |
}) | |
.pipe(concat('app.js')) | |
.pipe(uglify({ | |
outSourceMap: true | |
})) | |
.pipe(gulp.dest(folders.dest + '/assets/js')); | |
}); | |
/******************************************************************************* | |
IMAGES / SPRITE TASK | |
*******************************************************************************/ | |
gulp.task('images', function() { | |
return gulp.src(folders.src + '/assets/images/**/*') | |
.pipe(cache(imagemin({ | |
optimizationLevel: 3, | |
progressive: true, | |
interlaced: true | |
}))) | |
.pipe(gulp.dest(folders.dest + '/assets/images')) | |
.pipe(size()); | |
}); | |
/******************************************************************************* | |
TEMPLATE TASK | |
*******************************************************************************/ | |
// Jade | |
gulp.task('jade', function() { | |
return gulp.src(folders.src + '/jade/*.jade') | |
.pipe(jade()) | |
.pipe(gulp.dest(folders.tmp)) | |
.pipe(size()); | |
}); | |
/******************************************************************************* | |
SERVER TASK | |
*******************************************************************************/ | |
// Connect | |
gulp.task('connect', connect.server({ | |
root: [folders.src, folders.tmp], | |
port: 9000, | |
livereload: true, | |
open: { | |
// file: 'index.html', | |
browser: 'Google Chrome' | |
}, | |
})); | |
// Browser-Sync | |
gulp.task('browsersync', function() { | |
browserSync.init([folders.tmp + '/assets/css', folders.tmp + '/assets/js']); | |
/*, { | |
proxy: { | |
host: 'localhost', | |
port: '2368' | |
} | |
});*/ | |
}); | |
/******************************************************************************* | |
BUILD TASK | |
*******************************************************************************/ | |
gulp.task('default', function() { | |
gulp.start('jshint', 'js', 'sass', 'images', 'jade'); | |
}); | |
gulp.task('build', ['clean', 'default'], function() { | |
gulp.src(folders.tmp + '/assets/js/**/*.js') | |
.pipe(uglify()) | |
.pipe(gulp.dest(folders.dest + '/assets/js')); | |
gulp.src(folders.tmp + '/assets/css/**/*.css') | |
.pipe(minifyCSS()) | |
.pipe(gulp.dest(folders.dest + '/assets/css')); | |
gulp.src(folders.tmp + '/**/*.{html,shtml,php,xml,json}') | |
.pipe(minifyHTML()) | |
.pipe(gulp.dest(folders.dest)) | |
.pipe(notify('Build successfull')); | |
}); | |
// Watch | |
gulp.task('watch', ['default', 'connect'], function() { | |
// Watch for changes in `app` folder | |
gulp.watch([ | |
folders.tmp + '/**/*.{html,shtml,php,xml,json}', | |
folders.tmp + '/assets/css/**/*.css', | |
folders.tmp + '/assets/js/**/*.js', | |
folders.src + '/assets/images/**/*' | |
], function(event) { | |
return gulp.src(event.path) | |
.pipe(connect.reload()); | |
}); | |
// Watch .scss files | |
gulp.watch(folders.src + '/assets/scss/**/*.scss', ['sass']); | |
// Watch .stylus files | |
gulp.watch(folders.src + '/assets/stylus/**/*.styl', ['stylus']); | |
// Watch .js files | |
gulp.watch(folders.src + '/assets/js/**/*.js', ['js']); | |
// Watch image files | |
gulp.watch(folders.src + '/assets/images/**/*', ['images']); | |
// Watch .jade files | |
gulp.watch(folders.src + '/jade/**/*.jade', ['jade']); | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment