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 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('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']);