From f93efb0c00a07881c41c146cfbb95fc98f402e21 Mon Sep 17 00:00:00 2001 From: Maxime Thirouin Date: Sun, 4 May 2014 08:33:30 +0200 Subject: [PATCH] Add Gulp tasks --- Gulpfile.js | 1 + tasks/clean.js | 5 +++++ tasks/options.js | 18 ++++++++++++++++ tasks/publish.js | 16 +++++++++++++++ tasks/scripts-linting.js | 24 ++++++++++++++++++++++ tasks/scripts.js | 27 ++++++++++++++++++++++++ tasks/server.js | 32 +++++++++++++++++++++++++++++ tasks/static.js | 6 ++++++ tasks/stylesheets.js | 44 ++++++++++++++++++++++++++++++++++++++++ 9 files changed, 173 insertions(+) create mode 100644 tasks/clean.js create mode 100644 tasks/options.js create mode 100644 tasks/publish.js create mode 100644 tasks/scripts-linting.js create mode 100644 tasks/scripts.js create mode 100644 tasks/server.js create mode 100644 tasks/static.js create mode 100644 tasks/stylesheets.js diff --git a/Gulpfile.js b/Gulpfile.js index 2c52c96..e69adf1 100644 --- a/Gulpfile.js +++ b/Gulpfile.js @@ -30,6 +30,7 @@ gulp.task("watch", ["dist"], function() { gulp.watch("./styles/**/*.css", ["stylesheets"]) gulp.watch("./scripts/**/*.js", ["scripts"]) gulp.watch("./tasks/**/*.js", ["scripts:linting"]) + gulp.watch("./tests/**/*.js", ["scripts:linting"]) // gulp.watch("./dist/**/*").on("change", server.livereload) }) diff --git a/tasks/clean.js b/tasks/clean.js new file mode 100644 index 0000000..ba3c40d --- /dev/null +++ b/tasks/clean.js @@ -0,0 +1,5 @@ +var rimraf = require("rimraf") + +module.exports = function() { + rimraf.sync("./dist") +} diff --git a/tasks/options.js b/tasks/options.js new file mode 100644 index 0000000..8c26a2a --- /dev/null +++ b/tasks/options.js @@ -0,0 +1,18 @@ +/** + * parses cli arguments as options + */ +var options = require("minimist")(process.argv.slice(2)) +var defaults = { + plumber: true, + minify: false + } +// set some defaults options depending on some flags +if (options.production) { + defaults.plumber = false + defaults.minify = true +} + +options.plumber = options.plumber === undefined ? defaults.plumber: options.plumber +options.minify = options.minify === undefined ? defaults.minify: options.minify + +module.exports = options diff --git a/tasks/publish.js b/tasks/publish.js new file mode 100644 index 0000000..7d49438 --- /dev/null +++ b/tasks/publish.js @@ -0,0 +1,16 @@ +var gulp = require("gulp") +var ghPages = require("gulp-gh-pages") + +/** + * publish task + * + * publish build in the gh-pages branch + */ +module.exports = function() { + return gulp.src("./dist/**/*") + .pipe(ghPages({ + remoteUrl: "git@github.com:MoOx/pjax.git", + branch: "gh-pages", + cacheDir: __dirname + "/../.publish" + })) +} diff --git a/tasks/scripts-linting.js b/tasks/scripts-linting.js new file mode 100644 index 0000000..e38803f --- /dev/null +++ b/tasks/scripts-linting.js @@ -0,0 +1,24 @@ +var gulp = require("gulp") +var opts = require("./options") +var util = require("gulp-util") +var plumber = require("gulp-plumber") +var jscs = require("gulp-jscs") +var jshint = require("gulp-jshint") + +/** + * task scripts:linting + * + * jshint + jscs + */ +module.exports = function() { + return gulp.src([ + "./src/scripts/**/*.js", + "!./src/scripts/lib/**/*.js", + "./tasks/**/*.js", + "./tests/**/*.js", + ]) + .pipe(opts.plumber ? plumber(): util.noop()) + .pipe(jscs()) + .pipe(jshint()) + .pipe(jshint.reporter("jshint-stylish")) +} diff --git a/tasks/scripts.js b/tasks/scripts.js new file mode 100644 index 0000000..92c3a95 --- /dev/null +++ b/tasks/scripts.js @@ -0,0 +1,27 @@ +var gulp = require("gulp") +var util = require("gulp-util") +var plumber = require("gulp-plumber") +var browserify = require("gulp-browserify") + +var opts = require("./options") +var transforms = [ + // "jadeify", + // "debowerify", + // "decomponentify", + // "deglobalify", + // "es6ify" +] +if (opts.minify) { + transforms.push("uglifyify") +} + +module.exports = function() { + return gulp.src("./src/scripts/*.js") + .pipe(opts.plumber ? plumber(): util.noop()) + .pipe(browserify({ + transform: transforms, + debug: opts.production !== undefined + } + )) + .pipe(gulp.dest("./dist/scripts/")) +} diff --git a/tasks/server.js b/tasks/server.js new file mode 100644 index 0000000..386663d --- /dev/null +++ b/tasks/server.js @@ -0,0 +1,32 @@ +var gulpUtil = require("gulp-util") +var connect = require("connect") +var connectLivereload = require("connect-livereload") +var livereload = require("gulp-livereload") +var opn = require("opn") + +var livereloadServer +var ports = { + web: 2402, + livereload: 2403 +} + +module.exports = { + start: function() { + livereloadServer = livereload(ports.livereload) + + var app = connect() + .use(connectLivereload({port: ports.livereload})) + .use(connect.static("./dist/")) + + require("http").createServer(app) + .listen(ports.web) + .on("listening", function() { + gulpUtil.log("Started connect web server on http://localhost:" + ports.web + " and livereload server on http://localhost:" + ports.livereload) + }) + + opn("http://localhost:" + ports.web) + }, + livereload: function(file) { + livereloadServer.changed(file.path) + } +} diff --git a/tasks/static.js b/tasks/static.js new file mode 100644 index 0000000..bd941e3 --- /dev/null +++ b/tasks/static.js @@ -0,0 +1,6 @@ +var symlink = require("gulp-symlink") + +gulp.task("static", function() { + return gulp.src("./src/static/*") + .pipe(symlink("./dist/")) +}) diff --git a/tasks/stylesheets.js b/tasks/stylesheets.js new file mode 100644 index 0000000..fe19957 --- /dev/null +++ b/tasks/stylesheets.js @@ -0,0 +1,44 @@ +var gulp = require("gulp") +var opts = require("./options") +var util = require("gulp-util") +var plumber = require("gulp-plumber") +var rework = require("gulp-rework") +var reworkPlugins = { + imprt: require("rework-npm"), + // parent: require("rework-parent"), + // breakpoints: require("rework-breakpoints"), + vars: require("rework-vars"), + calc: require("rework-calc"), + // colorFn: require("rework-color-function"), // Tab Atkins's proposal color function in CSS + // hexAlpha: require("rework-hex-alpha"), // use 4-digit or 8-digit hex colors with alpha channels + // inline: require("rework-plugin-inline"), + // ieLimits: require("rework-ie-limits"), + // remFallback: require("rework-rem-fallback"), + // clearfix: require("rework-clearfix"), + } +var autoprefixer = require("gulp-autoprefixer") + +module.exports = function() { + return gulp.src("./src/styles/*.css") + .pipe(opts.plumber ? plumber(): util.noop()) + .pipe(rework( + reworkPlugins.imprt("./src/css"), + rework.colors(), + rework.references(), + // reworkPlugins.parent, + // reworkPlugins.breakpoints, + reworkPlugins.vars(), + reworkPlugins.calc, + //reworkPlugins.colorFn, + //reworkPlugins.hexAlpha, + //reworkPlugins.inline, + //reworkPlugins.ieLimits, + //reworkPlugins.remFallback, + // reworkPlugins.clearfix, + // rework.ease(), + // rework.extend(), + {sourcemap: !option.minify} + )) + .pipe(autoprefixer()) + .pipe(gulp.dest(paths.dist.stylesheets)) +}