Skip to content

Instantly share code, notes, and snippets.

@maxov
Created December 13, 2014 05:33
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save maxov/9414cfed6e85fe1bf6d4 to your computer and use it in GitHub Desktop.
Save maxov/9414cfed6e85fe1bf6d4 to your computer and use it in GitHub Desktop.
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