Skip to content

Instantly share code, notes, and snippets.

@tomkeysers
Last active March 20, 2018 13:43
Show Gist options
  • Select an option

  • Save tomkeysers/99817fbb0758af3f8432bf80a6f024c2 to your computer and use it in GitHub Desktop.

Select an option

Save tomkeysers/99817fbb0758af3f8432bf80a6f024c2 to your computer and use it in GitHub Desktop.

Revisions

  1. tomkeysers renamed this gist Jun 20, 2016. 1 changed file with 0 additions and 0 deletions.
    File renamed without changes.
  2. tomkeysers created this gist Jun 20, 2016.
    210 changes: 210 additions & 0 deletions gistfile1.txt
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,210 @@
    // generated on 2016-02-08 using generator-gulp-webapp 1.1.1
    import gulp from 'gulp';
    import gulpLoadPlugins from 'gulp-load-plugins';
    import browserSync from 'browser-sync';
    import del from 'del';
    import {stream as wiredep} from 'wiredep';

    var panini = require('panini');

    const $ = gulpLoadPlugins();
    const reload = browserSync.reload;

    gulp.task('styles', () => {
    return gulp.src('app/styles/*.scss')
    .pipe($.plumber())
    .pipe($.sourcemaps.init())
    .pipe($.sass.sync({
    outputStyle: 'expanded',
    precision: 10,
    includePaths: ['.']
    }).on('error', $.sass.logError))
    .pipe($.autoprefixer({browsers: ['> 1%', 'last 2 versions', 'Firefox ESR']}))
    .pipe($.sourcemaps.write())
    .pipe(gulp.dest('.tmp/styles'))
    .pipe(reload({stream: true}));
    });

    gulp.task('scripts', () => {
    return gulp.src('app/scripts/**/*.js')
    .pipe($.plumber())
    .pipe($.sourcemaps.init())
    .pipe($.babel())
    .pipe($.sourcemaps.write('.'))
    .pipe(gulp.dest('.tmp/scripts'))
    .pipe(reload({stream: true}));
    });

    function lint(files, options) {
    return () => {
    return gulp.src(files)
    .pipe(reload({stream: true, once: true}))
    .pipe($.eslint(options))
    .pipe($.eslint.format())
    .pipe($.if(!browserSync.active, $.eslint.failAfterError()));
    };
    }
    const testLintOptions = {
    env: {
    mocha: true
    }
    };

    gulp.task('lint', lint('app/scripts/**/*.js'));
    gulp.task('lint:test', lint('test/spec/**/*.js', testLintOptions));

    gulp.task('html', ['styles', 'scripts'], () => {
    return gulp.src('app/*.html')
    .pipe($.useref({searchPath: ['.tmp', 'app', '.']}))
    .pipe($.if('*.js', $.uglify()))
    .pipe($.if('*.css', $.cssnano()))
    .pipe($.if('*.html', $.htmlmin({collapseWhitespace: true})))
    .pipe(gulp.dest('dist'));
    });

    gulp.task('images', () => {
    return gulp.src('app/images/**/*')
    .pipe($.if($.if.isFile, $.cache($.imagemin({
    progressive: true,
    interlaced: true,
    // don't remove IDs from SVGs, they are often used
    // as hooks for embedding and styling
    svgoPlugins: [{cleanupIDs: false}]
    }))
    .on('error', function (err) {
    console.log(err);
    this.end();
    })))
    .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(gulp.dest('.tmp/fonts'))
    .pipe(gulp.dest('dist/fonts'));
    });

    gulp.task('extras', () => {
    return gulp.src([
    'app/*.*',
    '!app/*.html'
    ], {
    dot: true
    }).pipe(gulp.dest('dist'));
    });


    // Copy page templates into finished HTML files
    gulp.task('pages', function() {
    return gulp.src('app/pages/*.html')
    .pipe(panini({
    root: 'app/pages/',
    layouts: 'app/layouts/',
    partials: 'app/partials/',
    helpers: 'app/helpers/',
    data: 'app/data/'
    }))
    .pipe(gulp.dest('app'))
    .pipe(reload({stream: true}));
    // .on('finish', browser.reload);
    });

    // gulp.task('panini', function() {
    // gulp.src('app/pages/*.html')
    // .pipe(panini({
    // root: 'app/pages/',
    // layouts: 'app/layouts/',
    // partials: 'app/partials/',
    // helpers: 'app/helpers/',
    // data: 'app/data/'
    // }))
    // .pipe(gulp.dest('app'));
    // });

    gulp.task('pages:reset', function(done) {
    panini.refresh();
    gulp.run('pages');
    done();
    });

    gulp.task('clean', del.bind(null, ['.tmp', 'dist']));

    gulp.task('serve', ['pages', 'styles', 'scripts', 'fonts'], () => {
    browserSync({
    notify: false,
    port: 9000,
    server: {
    baseDir: ['.tmp', 'app'],
    routes: {
    '/bower_components': 'bower_components'
    }
    }
    });

    gulp.watch([
    'app/*.html',
    '.tmp/scripts/**/*.js',
    'app/images/**/*',
    '.tmp/fonts/**/*'
    ]).on('change', reload);

    gulp.watch(['app/pages/**/*'], ['pages']);
    gulp.watch(['app/{layouts,partials,helpers,data}/**/*'], ['pages:reset']);
    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', () => {
    browserSync({
    notify: false,
    port: 9000,
    server: {
    baseDir: ['dist']
    }
    });
    });

    gulp.task('serve:test', ['scripts'], () => {
    browserSync({
    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').on('change', reload);
    gulp.watch('test/spec/**/*.js', ['lint:test']);
    });

    // inject bower components
    gulp.task('wiredep', () => {
    gulp.src('app/styles/*.scss')
    .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', ['clean'], () => {
    gulp.start('build');
    });