134 lines
3.4 KiB
JavaScript
134 lines
3.4 KiB
JavaScript
// ==========================================================================
|
|
// 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 root = __dirname,
|
|
paths = {
|
|
// Watch paths
|
|
watch: {
|
|
less: path.join(root, "src/less/**/*"),
|
|
js: path.join(root, "src/js/**/*"),
|
|
sprite: path.join(root, "src/sprite/*.svg"),
|
|
templates: path.join(root, "src/templates/*.html"),
|
|
},
|
|
// Output paths
|
|
output: {
|
|
js: path.join(root, "dist/js/"),
|
|
css: path.join(root, "dist/css/"),
|
|
sprite: path.join(root, "dist/")
|
|
}
|
|
},
|
|
|
|
// Task names
|
|
taskNames = {
|
|
jsAll: "js-all",
|
|
lessBuild: "less-",
|
|
jsBuild: "js-",
|
|
sprite: "sprite-build",
|
|
templates: "templates"
|
|
},
|
|
// Task arrays
|
|
lessBuildTasks = [],
|
|
jsBuildTasks = [],
|
|
|
|
// Fetch bundles from JSON
|
|
bundles = loadJSON(path.join(root, "bundles.json"));
|
|
|
|
// Load json
|
|
function loadJSON(path) {
|
|
return JSON.parse(fs.readFileSync(path));
|
|
}
|
|
|
|
// Build templates
|
|
gulp.task(taskNames.templates, function () {
|
|
return gulp
|
|
.src(paths.watch.templates)
|
|
.pipe(hogan("templates.js", {
|
|
wrapper: false,
|
|
templateName: function (file) {
|
|
return path.basename(file.relative.replace(/\\/g, "-"), path.extname(file.relative));
|
|
}
|
|
}))
|
|
.pipe(gulp.dest(paths.output.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.output.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"], { cascade: true }))
|
|
.pipe(minifyCss())
|
|
.pipe(gulp.dest(paths.output.css));
|
|
});
|
|
})(key);
|
|
}
|
|
|
|
// Process Icons
|
|
gulp.task(taskNames.sprite, function () {
|
|
return gulp
|
|
.src(paths.watch.sprite)
|
|
.pipe(svgmin({
|
|
plugins: [{
|
|
removeDesc: true
|
|
}]
|
|
}))
|
|
.pipe(svgstore())
|
|
.pipe(gulp.dest(paths.output.sprite));
|
|
});
|
|
|
|
// Default gulp task
|
|
gulp.task("default", function(){
|
|
runSequence(taskNames.jsAll, lessBuildTasks.concat(taskNames.sprite, "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.watch.templates, [taskNames.jsAll]);
|
|
//gulp.watch(paths.watch.js, [taskNames.jsAll]);
|
|
gulp.watch(paths.watch.less, lessBuildTasks);
|
|
gulp.watch(paths.watch.sprite, [taskNames.iconBuild]);
|
|
}); |