Skip to content
Snippets Groups Projects
gulpfile.babel.js 1.77 KiB
const gulp = require('gulp');

const babel = require('gulp-babel');

const eslint = require('gulp-eslint');

const mocha = require('gulp-mocha');

const nodemon = require('gulp-nodemon');

const Cache = require('gulp-file-cache');

const docco = require('gulp-docco');

const cache = new Cache();

/**
 * Compile source files
 */
function compile() {
    // run ESLint
    gulp.src('src/**/*.js')
        .pipe(eslint())
        .pipe(eslint.format());

    // compile source to ES5
    gulp.src('src/**/*.js')
        .pipe(cache.filter())       // cache source files
        .pipe(babel())      // compile only modified files
        .pipe(cache.cache())        // cache compiled files
        .pipe(gulp.dest('build'));  // move compiled files to build directory

    // copy configuration file to build directory
    gulp.src('config.json')
        .pipe(gulp.dest('build'));

}

gulp.task('build', compile);

gulp.task('docco', () => {
    gulp.src('./src/**/*.js')
        .pipe(docco())
        .pipe(gulp.dest('./docs'));
});

gulp.task('doc', ['docco']);

gulp.task('test', () => {
  gulp.src('test/test.js', {read: false})
    .pipe(mocha())
    .once('error', () => {
      process.exit(1);
    })
    .once('end', () => {
      process.exit();
    });
});

gulp.task('watch', [], () => {
    console.log('Watching source directory for changes');
    compile();
    gulp.watch('src/**/*.js').on('change', () => {
        console.log('Recompiling source');
        compile();
        console.log('Source recompilation done')
    });
});

gulp.task('run', () => {
  process.chdir('build');
  nodemon({
    script: 'server.js',
    tasks: ['watch'],
    ignore: ["test/test.js", "gulpfile.babel.js"],
    ext: 'js html json',
    env: { 'NODE_ENV': 'development' }
  });
});

gulp.task('default', ['run']);