riot-starter/gulpfile.js

87 lines
2.3 KiB
JavaScript

'use strict';
const gulp = require('gulp'),
riot = require('gulp-riot'),
concat = require('gulp-concat'),
minify = require('gulp-minify'),
rollup = require('gulp-rollup-lightweight'),
stream = require('vinyl-source-stream'),
cssmin = require('gulp-clean-css'),
ref = require('gulp-useref');
// build riotjs tags (components)
gulp.task('tags', () => {
return gulp.src('./public/tags/**/*.tag.html')
.pipe(concat('tags.js'))
.pipe(riot({compact: true, whitespace: false}))
.pipe(minify({ext: {min: '.min.js'}}))
.pipe(gulp.dest('./dist/js'));
});
// bundle app files
gulp.task('bundle', gulp.series(() => {
return rollup({
input: './public/js/app.js',
treeshake: true,
output: {
file: 'js/bundle.js',
format: 'iife'
}
})
.pipe(stream('./js/bundle.js'))
.pipe(gulp.dest('./dist'))
}, () => {
return gulp.src(['./dist/js/bundle.js'])
.pipe(minify({ext: {min: '.min.js'}}))
.pipe(gulp.dest('./dist/js'));
}), () => {});
// move fonts
gulp.task('fonts', () => {
return gulp.src('./public/fonts/**/*.ttf')
.pipe(gulp.dest('./dist/fonts'));
});
// move images
// TODO: minimize
gulp.task('images', () => {
return gulp.src('./public/images/**/*')
.pipe(gulp.dest('./dist/images'));
});
// combine css
gulp.task('css', () => {
return gulp.src('./public/css/*.css')
.pipe(concat('styles.css'))
.pipe(cssmin())
.pipe(gulp.dest('./dist/css'));
});
// move vendor deps
gulp.task('vendor', () => {
return gulp.src('./public/vendor/**/*.min.*')
.pipe(gulp.dest('./dist/vendor'));
});
// move public files
gulp.task('public', () => {
return gulp.src('./public/*.*')
.pipe(gulp.dest('./dist'));
});
// build index
gulp.task('index', () => {
return gulp.src(['./public/*.html'])
.pipe(ref())
.pipe(gulp.dest('./dist'));
});
// build assests
gulp.task('assets', gulp.parallel('css', 'fonts', 'images', 'vendor'), () => {});
// build everything for production distribution
gulp.task('build', gulp.series('assets', 'public', 'index', 'tags', 'bundle'), () => {});
// by default do this...
gulp.task('default', gulp.series('build'), () => {});