Skip to content

Instantly share code, notes, and snippets.

@aldidas
Created March 14, 2016 12:57
Show Gist options
  • Save aldidas/6cc83366e54349e91577 to your computer and use it in GitHub Desktop.
Save aldidas/6cc83366e54349e91577 to your computer and use it in GitHub Desktop.
hapi.js experiment
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