// generated on 2018-10-25 using generator-webapp 3.0.1 const gulp = require('gulp'); const gulpLoadPlugins = require('gulp-load-plugins'); const browserSync = require('browser-sync').create(); const del = require('del'); const wiredep = require('wiredep').stream; const runSequence = require('run-sequence'); const $ = gulpLoadPlugins(); const reload = browserSync.reload; let dev = true; gulp.task('styles', () => { return gulp.src('app/styles/*.scss') .pipe($.plumber()) .pipe($.if(dev, $.sourcemaps.init())) .pipe($.sass.sync({ outputStyle: 'expanded', precision: 10, includePaths: ['.'] }).on('error', $.sass.logError)) .pipe($.autoprefixer({browsers: ['> 1%', 'last 2 versions', 'Firefox ESR']})) .pipe($.if(dev, $.sourcemaps.write('.'))) .pipe(gulp.dest('.tmp/styles')) .pipe(reload({stream: true})); }); gulp.task('scripts', () => { return gulp.src('app/scripts/**/*.js') .pipe($.plumber()) .pipe($.if(dev, $.sourcemaps.init())) .pipe($.babel()) .pipe($.if(dev, $.sourcemaps.write('.'))) .pipe(gulp.dest('.tmp/scripts')) .pipe(reload({stream: true})); }); function lint(files) { return gulp.src(files) .pipe($.eslint({ fix: true })) .pipe(reload({stream: true, once: true})) .pipe($.eslint.format()) .pipe($.if(!browserSync.active, $.eslint.failAfterError())); } gulp.task('lint', () => { return lint('app/scripts/**/*.js') .pipe(gulp.dest('app/scripts')); }); gulp.task('lint:test', () => { return lint('test/spec/**/*.js') .pipe(gulp.dest('test/spec')); }); gulp.task('html', ['styles', 'scripts'], () => { return gulp.src('app/*.html') .pipe($.useref({searchPath: ['.tmp', 'app', '.']})) .pipe($.if(/\.js$/, $.uglify({compress: {drop_console: true}}))) .pipe($.if(/\.css$/, $.cssnano({safe: true, autoprefixer: false}))) .pipe($.if(/\.html$/, $.htmlmin({ collapseWhitespace: true, minifyCSS: true, minifyJS: {compress: {drop_console: true}}, processConditionalComments: true, removeComments: true, removeEmptyAttributes: true, removeScriptTypeAttributes: true, removeStyleLinkTypeAttributes: true }))) .pipe(gulp.dest('dist')); }); gulp.task('images', () => { return gulp.src('app/images/**/*') .pipe($.cache($.imagemin())) .pipe(gulp.dest('dist/images')); }); gulp.task('fonts', () => { return gulp.src(require('main-bower-files')('**/*.{eot,svg,ttf,woff,woff2}', function (err) {}) .concat('app/fonts/**/*')) .pipe($.if(dev, gulp.dest('.tmp/fonts'), gulp.dest('dist/fonts'))); }); gulp.task('extras', () => { return gulp.src([ 'app/*', '!app/*.html' ], { dot: true }).pipe(gulp.dest('dist')); }); gulp.task('clean', del.bind(null, ['.tmp', 'dist'])); gulp.task('serve', () => { runSequence(['clean', 'wiredep'], ['styles', 'scripts', 'fonts'], () => { browserSync.init({ notify: false, port: 9000, server: { baseDir: ['.tmp', 'app'], routes: { '/bower_components': 'bower_components' } } }); gulp.watch([ 'app/*.html', 'app/images/**/*', '.tmp/fonts/**/*' ]).on('change', reload); gulp.watch('app/styles/**/*.scss', ['styles']); gulp.watch('app/scripts/**/*.js', ['scripts']); gulp.watch('app/fonts/**/*', ['fonts']); gulp.watch('bower.json', ['wiredep', 'fonts']); }); }); gulp.task('serve:dist', ['default'], () => { browserSync.init({ notify: false, port: 9000, server: { baseDir: ['dist'] } }); }); gulp.task('serve:test', ['scripts'], () => { browserSync.init({ notify: false, port: 9000, ui: false, server: { baseDir: 'test', routes: { '/scripts': '.tmp/scripts', '/bower_components': 'bower_components' } } }); gulp.watch('app/scripts/**/*.js', ['scripts']); gulp.watch(['test/spec/**/*.js', 'test/index.html']).on('change', reload); gulp.watch('test/spec/**/*.js', ['lint:test']); }); // inject bower components gulp.task('wiredep', () => { gulp.src('app/styles/*.scss') .pipe($.filter(file => file.stat && file.stat.size)) .pipe(wiredep({ ignorePath: /^(\.\.\/)+/ })) .pipe(gulp.dest('app/styles')); gulp.src('app/*.html') .pipe(wiredep({ ignorePath: /^(\.\.\/)*\.\./ })) .pipe(gulp.dest('app')); }); gulp.task('build', ['lint', 'html', 'images', 'fonts', 'extras'], () => { return gulp.src('dist/**/*').pipe($.size({title: 'build', gzip: true})); }); gulp.task('default', () => { return new Promise(resolve => { dev = false; runSequence(['clean', 'wiredep'], 'build', resolve); }); }); gulp.task('an-js', () =>{ return gulp.src('app/scripts/an-skill-bar.js') .pipe($.plumber()) .pipe($.if(dev, $.sourcemaps.init())) .pipe($.babel()) .pipe($.uglify( { output: { comments: true } } )) .pipe($.if(dev, $.sourcemaps.write('.'))) .pipe(gulp.dest('build/scripts')) }); gulp.task('an-css', () => { return gulp.src('app/styles/an-skill-bar.scss') .pipe($.plumber()) .pipe($.if(dev, $.sourcemaps.init())) .pipe($.sass.sync({ outputStyle: 'expanded', precision: 10, includePaths: ['.'] }).on('error', $.sass.logError)) .pipe($.autoprefixer({browsers: ['> 1%', 'last 2 versions', 'Firefox ESR']})) .pipe($.cssnano( { discardComments: false, safe: true, autoprefixer: true } )) .pipe($.if(dev, $.sourcemaps.write('.'))) .pipe(gulp.dest('build/styles')); }); gulp.task('an-build', ['lint', 'an-css', 'an-js'], () => { return gulp.src('build/**/*').pipe($.size({title: 'build', gzip: true})); });