Pony.fm/gulpfile.js
2015-04-23 04:17:05 -05:00

140 lines
No EOL
5 KiB
JavaScript

var gulp = require("gulp"),
coffee = require("gulp-coffee"),
concat = require("gulp-concat"),
sourcemaps = require("gulp-sourcemaps"),
cached = require("gulp-cached"),
plumber = require("gulp-plumber"),
notify = require("gulp-notify"),
order = require("gulp-order"),
argv = require("yargs").argv,
gulpif = require("gulp-if"),
uglify = require("gulp-uglify"),
less = require("gulp-less"),
minifyCss = require('gulp-minify-css');
var plumberOptions = {
errorHandler: notify.onError("Error: <%= error.message %>")
};
gulp.task("scripts-app", function() {
var paths = [
"app/scripts/app/**/*.{coffee,js}",
"app/scripts/base/**/*.{coffee,js}",
"app/scripts/shared/**/*.{coffee,js}"
];
if (!argv.production) {
paths.push("app/scripts/debug/**/*.{coffee,js}");
// we also want to add the embed stuff, since we're in development mode
// we want to watch embed files and re-compile them. However, we want
// to leave this path out in production so that embed files are not bloating
// the js file
paths.push("app/scripts/embed/**/*.{coffee,js}");
}
return argv.production
// Production pipeline
? gulp.src(paths, {base: "app/scripts"})
.pipe(plumber(plumberOptions))
.pipe(order([
"app/scripts/base/jquery-2.0.2.js",
"app/scripts/base/angular.js",
"app/scripts/base/*.{coffee,js}",
"app/scripts/shared/*.{coffee,js}",
"app/scripts/app/*.{coffee,js}",
"app/scripts/app/services/*.{coffee,js}",
"app/scripts/app/filters/*.{coffee,js}",
"app/scripts/app/directives/*.{coffee,js}",
"app/scripts/app/controllers/*.{coffee,js}",
"app/scripts/**/*.{coffee,js}"
], {base: "."}))
.pipe(gulpif(/\.coffee/, coffee()))
.pipe(concat("app.js"))
// .pipe(uglify())
.pipe(gulp.dest("public/build/scripts"))
// Development/watch pipeline
: gulp.src(paths, {base: "app/scripts"})
.pipe(plumber(plumberOptions))
.pipe(cached('scripts'))
.pipe(sourcemaps.init())
.pipe(gulpif(/\.coffee/, coffee()))
.pipe(sourcemaps.write())
.pipe(gulp.dest("public/build/scripts"));
});
gulp.task("scripts-embed", function() {
// note that this task should really only ever be invoked for production
// since development-mode watches and builds include the embed scripts
// already
var includedScripts = [
"app/scripts/base/jquery-2.0.2.js",
"app/scripts/base/jquery.viewport.js",
"app/scripts/base/underscore.js",
"app/scripts/base/moment.js",
"app/scripts/base/jquery.timeago.js",
"app/scripts/base/soundmanager2-nodebug.js",
"app/scripts/embed/*.coffee"
];
return gulp.src(includedScripts, {base: "app/scripts"})
.pipe(plumber(plumberOptions))
.pipe(gulpif(/\.coffee/, coffee()))
.pipe(order(includedScripts, {base: "."}))
.pipe(concat("embed.js"))
.pipe(uglify())
.pipe(gulp.dest("public/build/scripts"));
});
gulp.task("styles-app", function() {
var includedStyles = [
"app/styles/base/jquery-ui.css",
"app/styles/base/colorbox.css",
"app/styles/app.less"
];
if (!argv.production) {
includedStyles.push("app/styles/profiler.less");
includedStyles.push("app/styles/prettify.css");
// we also want to add the embed stuff, since we're in development mode
// we want to watch embed files and re-compile them. However, we want
// to leave this path out in production so that embed files are not bloating
// the css file
includedStyles.push("app/styles/embed.css");
}
return argv.production
// Production pipeline
? gulp.src(includedStyles, {base: "app/styles"})
.pipe(plumber(plumberOptions))
.pipe(gulpif(/\.less/, less()))
.pipe(concat("app.css"))
.pipe(minifyCss())
.pipe(gulp.dest("public/build/styles"))
// Development pipeline
: gulp.src(includedStyles, {base: "app/styles"})
.pipe(plumber(plumberOptions))
.pipe(sourcemaps.init())
.pipe(gulpif(/\.less/, less()))
.pipe(sourcemaps.write())
.pipe(gulp.dest("public/build/styles"));
});
gulp.task("styles-embed", function() {
// note that this task should really only ever be invoked for production
// since development-mode watches and builds include the embed styles
// already
return gulp.src(["app/styles/embed.less"], {base: "app/styles"})
.pipe(less())
.pipe(concat("embed.css"))
.pipe(minifyCss())
.pipe(gulp.dest("public/build/styles"));
});
gulp.task("watch", function() {
gulp.watch("app/scripts/**/*.{coffee,js}", ["scripts-app"]);
gulp.watch("app/styles/**/*.{css,less}", ["styles-app"]);
});