"use strict"; const gulp = require('gulp'); const sass = require('gulp-sass'); const concat = require('gulp-concat'); const imagemin = require('gulp-imagemin'); const cache = require('gulp-cache'); const gulpIf = require('gulp-if'); const browserify = require('browserify'); const del = require('del'); const source = require('vinyl-source-stream'); const buffer = require('vinyl-buffer'); const sourcemaps = require('gulp-sourcemaps'); const budo = require('budo'); const babelify = require('babelify'); const cssFiles = 'src/scss/**/*.?(s)css'; const assetsFiles = [ "src/assets/**/*" ]; gulp.task("clean", function(done) { del.sync('build'); done(); }); gulp.task("sass", function() { return gulp.src(cssFiles) .pipe(sass()) .pipe(concat('style.css')) .pipe(gulp.dest('./build')); }); gulp.task("assets", function() { return gulp.src(assetsFiles) /* NOTE: Currently disabled, causes an error: [19:47:33] Error: Callback called multiple times at DestroyableTransform.afterTransform (/home/sven/projects/iris/node_modules/gulp-cache/node_modules/readable-stream/lib/_stream_transform.js:82:31) at EventEmitter.signals.on.err (/home/sven/projects/iris/node_modules/gulp-cache/lib/index.js:451:7) at emitOne (events.js:116:13) at EventEmitter.emit (events.js:211:7) at DestroyableTransform.onError (/home/sven/projects/iris/node_modules/gulp-cache/lib/index.js:288:15) at Object.onceWrapper (events.js:315:30) at emitOne (events.js:116:13) at DestroyableTransform.emit (events.js:211:7) at /home/sven/projects/iris/node_modules/through2-concurrent/through2-concurrent.js:41:14 at imagemin.buffer.then.catch.error (/home/sven/projects/iris/node_modules/gulp-imagemin/index.js:98:5) */ // .pipe(gulpIf('*.+(png|jpg|jpeg|gif|svg)', // cache(imagemin({ // interlaced: true // })) // )) .pipe(gulp.dest('build')); }); gulp.task('js', function() { let b = browserify({ entries: 'src/app.js', debug: false, transform: [babelify.configure({ presets: ['@babel/preset-env', '@babel/preset-react'] })] }); return b.bundle() .pipe(source('src/app.js')) .pipe(buffer()) .pipe(sourcemaps.init({ loadMaps: true })) .pipe(gulp.dest('build')); }); gulp.task('watch', gulp.series(["clean", "assets", "sass", function(cb) { budo("src/app.js", { live: true, dir: "build", port: 3000, browserify: { transform: babelify } }).on('exit', cb); gulp.watch(cssFiles, gulp.series(["sass"])); gulp.watch(assetsFiles, gulp.series(["assets"])); }])); gulp.task('build', gulp.parallel(['clean', 'assets', 'js', 'sass', function(done) { done(); }]));