aboutsummaryrefslogtreecommitdiffstats
path: root/gulpfile.js
diff options
context:
space:
mode:
authorSam Potts <me@sampotts.me>2015-02-14 22:42:44 +1100
committerSam Potts <me@sampotts.me>2015-02-14 22:42:44 +1100
commit751d8db9d88d45b33792982103f8682e21ac876e (patch)
tree922222dd411b34a5d47d2e1453a167919dbdb417 /gulpfile.js
downloadplyr-751d8db9d88d45b33792982103f8682e21ac876e.tar.lz
plyr-751d8db9d88d45b33792982103f8682e21ac876e.tar.xz
plyr-751d8db9d88d45b33792982103f8682e21ac876e.zip
WIP
Diffstat (limited to 'gulpfile.js')
-rw-r--r--gulpfile.js139
1 files changed, 139 insertions, 0 deletions
diff --git a/gulpfile.js b/gulpfile.js
new file mode 100644
index 00000000..600b384b
--- /dev/null
+++ b/gulpfile.js
@@ -0,0 +1,139 @@
+// ==========================================================================
+// Gulp build script
+// ==========================================================================
+/*global require, __dirname*/
+
+var fs = require("fs"),
+ path = require("path"),
+ gulp = require("gulp"),
+ gutil = require("gulp-util"),
+ concat = require("gulp-concat"),
+ uglify = require("gulp-uglify"),
+ less = require("gulp-less"),
+ minifyCss = require("gulp-minify-css"),
+ runSequence = require("run-sequence"),
+ prefix = require("gulp-autoprefixer"),
+ svgstore = require("gulp-svgstore"),
+ svgmin = require("gulp-svgmin"),
+ hogan = require("gulp-hogan-compile");
+
+var projectPath = __dirname;
+var paths = {
+ project: projectPath,
+
+ // Watch paths
+ watchless: path.join(projectPath, "assets/less/**/*"),
+ watchjs: path.join(projectPath, "assets/js/**/*"),
+ watchicons: path.join(projectPath, "assets/icons/**/*"),
+ watchtemplates: path.join(projectPath, "assets/templates/**/*"),
+
+ // SVG Icons
+ svg: path.join(projectPath, "assets/icons/*.svg"),
+
+ // Output paths
+ js: path.join(projectPath, "dist/js/"),
+ css: path.join(projectPath, "dist/css/"),
+ icons: path.join(projectPath, "dist/svg/")
+},
+
+// Task names
+taskNames = {
+ jsAll: "js-all",
+ lessBuild: "less-",
+ jsBuild: "js-",
+ iconBuild: "icon-build",
+ templates: "templates"
+},
+// Task arrays
+lessBuildTasks = [],
+jsBuildTasks = [],
+
+// Fetch bundles from JSON
+bundles = loadJSON(path.join(paths.project, "bundles.json"));
+
+// Load json
+function loadJSON(path) {
+ return JSON.parse(fs.readFileSync(path));
+}
+
+// Build templates
+gulp.task(taskNames.templates, function () {
+ return gulp
+ .src(paths.watchtemplates)
+ .pipe(hogan("templates.js", {
+ wrapper: false,
+ templateName: function (file) {
+ return path.basename(file.relative.replace(/\\/g, "-"), path.extname(file.relative));
+ }
+ }))
+ .pipe(gulp.dest(paths.js));
+});
+
+// Process JS
+for (var key in bundles.js) {
+ (function(key) {
+ var taskName = taskNames.jsBuild + key;
+ jsBuildTasks.push(taskName);
+
+ gulp.task(taskName, function () {
+ return gulp
+ .src(bundles.js[key])
+ .pipe(concat(key))
+ .pipe(uglify())
+ .pipe(gulp.dest(paths.js));
+ });
+ })(key);
+}
+
+// Process CSS
+for (var key in bundles.less) {
+ (function (key) {
+ var taskName = taskNames.lessBuild + key;
+ lessBuildTasks.push(taskName);
+
+ gulp.task(taskName, function () {
+ return gulp
+ .src(bundles.less[key])
+ .pipe(less())
+ .on("error", gutil.log)
+ .pipe(concat(key))
+ .pipe(prefix(["last 2 versions", "> 1%", "ie 9"], { cascade: true }))
+ .pipe(minifyCss())
+ .pipe(gulp.dest(paths.css));
+ });
+ })(key);
+}
+
+// Process Icons
+gulp.task(taskNames.iconBuild, function () {
+ return gulp
+ .src(paths.svg)
+ .pipe(svgmin({
+ plugins: [{
+ removeDesc: true
+ }]
+ }))
+ .pipe(svgstore({
+ prefix: "icon-",
+ fileName: "sprite.svg"
+ }))
+ .pipe(gulp.dest(paths.icons));
+});
+
+// Default gulp task
+gulp.task("default", function(){
+ runSequence(taskNames.jsAll, lessBuildTasks.concat(taskNames.iconBuild, "watch"));
+});
+
+// Build all JS (inc. templates)
+gulp.task(taskNames.jsAll, function(){
+ runSequence(taskNames.templates, jsBuildTasks);
+});
+
+// Watch for file changes
+gulp.task("watch", function () {
+ gulp.watch(paths.watchtemplates, taskNames.jsAll);
+ gulp.watch(paths.watchjs, taskNames.jsAll);
+ gulp.watch(paths.watchless, lessBuildTasks);
+ gulp.watch(paths.watchicons, taskNames.iconBuild);
+}); \ No newline at end of file