-
-
Save maxov/9414cfed6e85fe1bf6d4 to your computer and use it in GitHub Desktop.
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
var gulp = require('gulp'); | |
var gutil = require('gulp-util'); | |
var bower = require('main-bower-files'); | |
var rimraf = require('gulp-rimraf'); | |
var uglify = require('gulp-uglify'); | |
var minify = require('gulp-minify-css'); | |
var concat = require('gulp-concat'); | |
var templates = require('gulp-jade'); | |
var nodemon = require('gulp-nodemon'); | |
var stylus = require('gulp-stylus'); | |
var sourcemaps = require('gulp-sourcemaps'); | |
var filter = require('gulp-filter'); | |
var livereload = require('gulp-livereload'); | |
var runseq = require('run-sequence'); | |
var open = require('open'); | |
var paths = { | |
assets: ['./assets/**/*'], | |
stylus: ['app/**/*.styl', 'app/**/*.css', '!app/**/_*.styl'], | |
templates: ['app/**/*.jade', '!app/**/_*.jade'], | |
bower: ['bower_components/**/*'] | |
}; | |
// BUILD | |
gulp.task('assets', function () { | |
return gulp.src(paths.assets) | |
.pipe(gulp.dest('./public')); | |
}); | |
gulp.task('stylus', function () { | |
var styl = stylus({ | |
use: require('nib')() | |
}); | |
styl.on('error', function (e) { | |
gutil.log(e.message); | |
styl.end(); | |
}); | |
return gulp.src(paths.stylus) | |
.pipe(sourcemaps.init()) | |
.pipe(styl) | |
.pipe(concat('app.css')) | |
.pipe(sourcemaps.write('../maps/', {sourceRoot: '../app/'})) | |
.pipe(gulp.dest('./public/css')); | |
}); | |
gulp.task('templates', function () { | |
return gulp.src(paths.templates) | |
.pipe(templates()) | |
.pipe(gulp.dest('./public')); | |
}); | |
gulp.task('bower', function () { | |
var js = filter('**/*.js'); | |
var css = filter('**/*.css'); | |
var b = gulp.src(bower(), {base: 'bower_components/'}); | |
b | |
.pipe(js) | |
.pipe(sourcemaps.init({loadMaps: true})) | |
.pipe(concat('vendor.js')) | |
.pipe(sourcemaps.write('../maps/', {sourceRoot: '../bower_components/'})) | |
.pipe(gulp.dest('./public/js')); | |
return b | |
.pipe(css) | |
.pipe(sourcemaps.init({loadMaps: true})) | |
.pipe(concat('vendor.css')) | |
.pipe(sourcemaps.write('../maps/', {sourceRoot: '../bower_components/'})) | |
.pipe(gulp.dest('./public/css')); | |
}); | |
// PRODUCTION BUILD | |
gulp.task('stylus:prod', function () { | |
return gulp.src(paths.stylus) | |
.pipe(stylus({ | |
use: require('nib')() | |
})) | |
.pipe(concat('app.css')) | |
.pipe(minify()) | |
.pipe(gulp.dest('./public/css')); | |
}); | |
gulp.task('bower:prod', function () { | |
var js = filter('**/*.js'); | |
var css = filter('**/*.css'); | |
var b = gulp.src(bower(), {base: 'bower_components/'}); | |
b | |
.pipe(js) | |
.pipe(concat('vendor.js')) | |
.pipe(uglify()) | |
.pipe(gulp.dest('./public/js')); | |
return b | |
.pipe(css) | |
.pipe(concat('vendor.css')) | |
.pipe(minify()) | |
.pipe(gulp.dest('./public/css')); | |
}); | |
gulp.task('clean', function () { | |
return gulp.src('./public', {read: false}) | |
.pipe(rimraf()); | |
}); | |
gulp.task('build', ['bower', 'stylus', 'assets']); | |
gulp.task('build:prod', function (cb) { | |
runseq( | |
'clean', | |
['bower:prod', 'stylus:prod', 'assets'], | |
cb | |
); | |
}); | |
// DEVELOPMENT | |
var port; | |
gulp.task('serve', ['build'], function () { | |
port = livereload.listen().port; | |
gulp.watch(['public/**/*', 'app/**/*.jade'], function (file) { | |
livereload.changed(file.path); | |
}); | |
}); | |
gulp.task('express', ['build'], function () { | |
nodemon({ script: 'start.js', env: {'LR_PORT': port} }) | |
.on('change', function () { | |
setTimeout(function () { | |
livereload.changed('index.html'); | |
}, 500); | |
}); | |
}); | |
gulp.task('watch', ['build'], function () { | |
gulp.watch(paths.assets, ['assets']); | |
gulp.watch(['app/**/*.styl'], ['stylus']); | |
gulp.watch(paths.bower, ['bower']); | |
}); | |
gulp.task('dev', ['watch', 'serve', 'express']); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment