'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'), () => {});