Created
March 14, 2016 12:57
-
-
Save aldidas/6cc83366e54349e91577 to your computer and use it in GitHub Desktop.
hapi.js experiment
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const paths = { | |
src: { | |
sass: './app/client/scss/style.scss', | |
allsass: './app/client/sass/**/*.scss', | |
js: './app/client/js/app.js', | |
alljs: './app/client/js/**/*.js', | |
img: './app/client/img/**/*', | |
partials: './app/client/partials/**/*.html', | |
index: './app/client/index.hbs', | |
version: { | |
js: 'public/js/app.min.js', | |
css: 'public/css/style.min.css' | |
} | |
}, | |
dest: { | |
public: 'public', | |
dist: 'public/dist', | |
js: 'public/js', | |
css: 'public/css', | |
img: 'public/img', | |
font: 'public/fonts', | |
partials: 'public/partials' | |
} | |
} | |
const fs = require('fs'), | |
gulp = require('gulp'), | |
browserify = require('browserify'), | |
handlebars = require('gulp-compile-handlebars'), | |
rev = require('gulp-rev'), | |
sass = require('gulp-ruby-sass'), | |
autoprefixer = require('gulp-autoprefixer'), | |
cssnano = require('gulp-cssnano'), | |
sourcemaps = require('gulp-sourcemaps'), | |
rename = require('gulp-rename'), | |
uglify = require('gulp-uglify'), | |
imagemin = require('gulp-imagemin'), | |
cache = require('gulp-cache'), | |
del = require('del'), | |
babel = require('babelify'), | |
source = require('vinyl-source-stream'), | |
buffer = require('vinyl-buffer'), | |
transform = require('vinyl-transform'), | |
through2 = require('through2'), | |
notify = require('gulp-notify') | |
const handlebarOpts = { | |
helpers: { | |
assetPath: function(path, context) { | |
return ['/dist', context.data.root[path]].join('/') | |
} | |
} | |
} | |
gulp.task('style', () => { | |
return sass(paths.src.sass, { sourcemap: true }) | |
.on('error', sass.logError) | |
.pipe(autoprefixer('last 2 versions')) | |
.pipe(rename({ | |
suffix: '.min' | |
})) | |
.pipe(cssnano()) | |
.pipe(sourcemaps.write()) | |
.pipe(gulp.dest(paths.dest.css)) | |
.pipe(notify({ | |
message: 'style task completed.' | |
})) | |
}) | |
gulp.task('script', () => { | |
return browserify(paths.src.js, { debug: true }) | |
.transform(babel, { presets: ['es2015'] }) | |
.bundle().on('error', (err) => { | |
console.log(err) | |
this.emit('end') | |
}) | |
.pipe(source('app.js')) | |
.pipe(buffer()) | |
.pipe(sourcemaps.init()) | |
.pipe(uglify()) | |
.pipe(rename({ | |
suffix: '.min' | |
})) | |
.pipe(sourcemaps.write()) | |
.pipe(gulp.dest(paths.dest.js)) | |
.pipe(notify({ | |
message: 'script task completed.' | |
})) | |
}); | |
gulp.task('img', () => { | |
return gulp.src(paths.src.img) | |
.pipe(cache(imagemin({ | |
optimizationLevel: 3, | |
progressive: true, | |
interlaced: true | |
}))) | |
.pipe(gulp.dest(paths.dest.img)) | |
.pipe(notify({ | |
message: 'img task completed.' | |
})) | |
}) | |
gulp.task('html', () => { | |
return gulp.src(paths.src.partials) | |
.pipe(gulp.dest(paths.dest.partials)) | |
.pipe(notify({ | |
message: 'html task completed.' | |
})) | |
}) | |
gulp.task('font-awesome', () => { | |
return gulp.src('./node_modules/font-awesome/fonts/**/*') | |
.pipe(gulp.dest(paths.dest.font)) | |
.pipe(notify({ | |
message: 'font awesome copied' | |
})) | |
}) | |
gulp.task('version', ['style', 'script'], () => { | |
return gulp.src([paths.src.version.js, paths.src.version.css]) | |
.pipe(rev()) | |
.pipe(gulp.dest(paths.dest.dist)) | |
.pipe(rev.manifest({ | |
base: paths.dest.public, | |
merge: true | |
})) | |
.pipe(gulp.dest(paths.dest.dist)) | |
.pipe(notify({ | |
message: 'version task completed.' | |
})) | |
}) | |
gulp.task('index', ['version'], () => { | |
var manifest = JSON.parse(fs.readFileSync('public/rev-manifest.json', 'utf8')); | |
return gulp.src(paths.src.index) | |
.pipe(handlebars(manifest, handlebarOpts)) | |
.pipe(rename('index.html')) | |
.pipe(gulp.dest(paths.dest.public)) | |
.pipe(notify({ | |
message: 'index task completed.' | |
})) | |
}) | |
gulp.task('cleanup', ['index'], () => { | |
return del(['public/js', 'public/css']) | |
}) | |
gulp.task('clean', () => { | |
return del(['public/**/*']) | |
}) | |
gulp.task('copy', () => { | |
gulp.start('font-awesome', 'html', 'img') | |
}) | |
gulp.task('bundling', ['script', 'style'], () => { | |
gulp.start('version') | |
}) | |
gulp.task('finishing', ['bundling'], () => { | |
gulp.start('cleanup') | |
}) | |
gulp.task('default', ['clean'], () => { | |
gulp.start('copy', 'bundling', 'finishing') | |
}) | |
gulp.task('watch', () => { | |
gulp.watch(paths.src.alljs, ['script', 'version', 'index', 'cleanup']) | |
gulp.watch(paths.src.allsass, ['style', 'version', 'index', 'cleanup']) | |
gulp.watch(paths.src.partials, ['html']) | |
gulp.watch(paths.src.img, ['img']) | |
}) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment