const fs = require('fs'); 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 jsdoc = require('gulp-jsdoc3'); const cache = new Cache(); function createLogDir() { const logDirPath = 'build/logs'; fs.access(logDirPath, fs.F_OK, (err) => { if (err) { console.info(`Logs directory not found, creating it.`); fs.mkdir(logDirPath, 0o700, (dirErr) => { console.error(`Failed to create logs directory.\n\tError: ${dirErr}`); }); } }); } /** * Compile source files */ gulp.task('compile', () => { createLogDir(); // 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('doc', (cb) => { let config = require('./jsdoc.json'); gulp.src(['README.md', './src/**/*.js'], {read: false}) .pipe(jsdoc(config, cb)); }); gulp.task('test', ['build'], () => { gulp.src('test/test.js', {read: false}) .pipe(mocha()) .once('error', () => { process.exit(1); }) .once('end', () => { process.exit(); }); }); gulp.task('watch', ['compile'], () => { console.log('Watching source directory for changes'); gulp.watch('src/**/*.js').on('change', () => { console.log('Recompiling source'); gulp.start('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']);