diff --git a/.gitignore b/.gitignore index 7580c79..4979fbc 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ node_modules bower_components public .DS_Store +rev-manifest.json diff --git a/gulpfile.js b/gulpfile.js index 736aa82..ee16be2 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -8,7 +8,11 @@ var gulp = require('gulp'); var gutil = require('gulp-util'); var jade = require('gulp-jade'); var notifier = require('node-notifier'); +var path = require('path'); var prefix = require('gulp-autoprefixer'); +var replace = require('gulp-replace'); +var rev = require('gulp-rev'); +var rimraf = require('rimraf'); var source = require('vinyl-source-stream'); var sourcemaps = require('gulp-sourcemaps'); var streamify = require('gulp-streamify'); @@ -20,6 +24,7 @@ var watchify = require('watchify'); var production = process.env.NODE_ENV === 'production'; var config = { + destination: './public', scripts: { source: './src/js/main.js', destination: './public/js/', @@ -29,7 +34,8 @@ var config = { templates: { source: './src/jade/*.jade', watch: './src/jade/*.jade', - destination: './public/' + destination: './public/', + revision: './public/**/*.html' }, styles: { source: './src/stylus/style.styl', @@ -40,6 +46,11 @@ var config = { source: './src/assets/**/*.*', watch: './src/assets/**/*.*', destination: './public/' + }, + revision: { + source: ['./public/**/*.css', './public/**/*.js'], + base: path.join(__dirname, 'public'), + destination: './public/' } }; @@ -130,7 +141,7 @@ gulp.task('server', function() { open: false, port: 9001, server: { - baseDir: './public' + baseDir: config.destination } }); }); @@ -155,5 +166,29 @@ gulp.task('watch', function() { var buildTasks = ['templates', 'styles', 'assets']; -gulp.task('build', buildTasks.concat(['scripts'])); +gulp.task('revision', buildTasks.concat(['scripts']), function() { + return gulp.src(config.revision.source, {base: config.revision.base}) + .pipe(rev()) + .pipe(gulp.dest(config.revision.destination)) + .pipe(rev.manifest()) + .pipe(gulp.dest('./')); +}); + +gulp.task('replace-revision-references', ['revision', 'templates'], function() { + var revisions = require('./rev-manifest.json'); + + var pipeline = gulp.src(config.templates.revision); + + pipeline = Object.keys(revisions).reduce(function(stream, key) { + return stream.pipe(replace(key, revisions[key])); + }, pipeline); + + return pipeline.pipe(gulp.dest(config.templates.destination)); +}); + +gulp.task('build', function() { + rimraf.sync(config.destination); + gulp.start(buildTasks.concat(['scripts', 'revision', 'replace-revision-references'])); +}); + gulp.task('default', buildTasks.concat(['watch', 'server'])); diff --git a/package.json b/package.json index ba421de..d4b6193 100644 --- a/package.json +++ b/package.json @@ -29,6 +29,8 @@ "gulp-autoprefixer": "1.0.1", "gulp-duration": "0.0.0", "gulp-jade": "~0.9.0", + "gulp-replace": "^0.5.3", + "gulp-rev": "^4.0.0", "gulp-sourcemaps": "^1.3.0", "gulp-streamify": "0.0.5", "gulp-stylus": "~2.0.0", @@ -39,6 +41,7 @@ "karma-cli": "0.0.4", "karma-jasmine": "~0.2.2", "node-notifier": "^4.2.1", + "rimraf": "^2.3.4", "vinyl-source-stream": "~1.0.0", "watchify": "^3.2.1" },