import gulp from 'gulp'; import del from 'del'; import sourcemaps from 'gulp-sourcemaps'; import webpack from 'webpack-stream'; import babel from 'gulp-babel'; import runSequence from 'run-sequence'; import path from 'path'; import childProcess from 'child_process'; import eslint from 'gulp-eslint'; import mocha from 'gulp-mocha'; const PATHS = setUpPaths(); gulp.task('default', ['build']); gulp.task('build', callback => { runSequence('clean', ['build-cli', 'build-app', 'build-tests'], callback); }); gulp.task('build-app', ['build-static'], () => { return gulp.src(PATHS.APP_MAIN_JS) .pipe(webpack(require(PATHS.WEBPACK_CONFIG))) .pipe(gulp.dest(PATHS.APP_DEST)); }); gulp.task('clean', callback => { del(PATHS.CLI_DEST).then(() => { del(PATHS.APP_DEST).then(() => { del(PATHS.TEST_DEST).then(() => { callback(); }); }); }); }); gulp.task('build-cli', done => { return gulp.src(PATHS.CLI_SRC_JS) .pipe(sourcemaps.init()) .pipe(babel()) .on('error', done) .pipe(sourcemaps.write('.')) .pipe(gulp.dest('lib')); }); gulp.task('build-static', ['build-static-js', 'build-static-not-js']); gulp.task('build-static-not-js', () => { return gulp.src([PATHS.APP_STATIC_ALL, '!**/*.js']) .pipe(gulp.dest(PATHS.APP_STATIC_DEST)); }); gulp.task('build-static-js', done => { return gulp.src(PATHS.APP_STATIC_JS) .pipe(sourcemaps.init()) .pipe(babel()) .on('error', done) .pipe(sourcemaps.write('.')) .pipe(gulp.dest(PATHS.APP_STATIC_DEST)); }); gulp.task('watch', ['build'], () => { var handleError = function(error) { console.error(error); }; gulp.watch(PATHS.APP_ALL, ['build-app']) .on('error', handleError); gulp.watch(PATHS.CLI_SRC_JS, ['build-cli']) .on('error', handleError); gulp.watch(PATHS.TEST_SRC_JS, ['build-tests']) .on('error', handleError); }); gulp.task('publish', done => { childProcess.spawn('npm', ['publish'], {stdio: 'inherit'}) .on('close', done); }); gulp.task('release', callback => { return runSequence('test', 'lint', 'build', 'publish', callback); }); gulp.task('lint', () => { return gulp.src(['**/*.js', '!node_modules/**', '!app/node_modules/**', '!app/lib/**', '!lib/**', '!built-tests/**']) .pipe(eslint()) .pipe(eslint.format()) .pipe(eslint.failAfterError()); }); gulp.task('build-tests', done => { return gulp.src(PATHS.TEST_SRC_JS) .pipe(sourcemaps.init()) .pipe(babel()) .on('error', done) .pipe(sourcemaps.write('.')) .pipe(gulp.dest(PATHS.TEST_DEST)); }); gulp.task('test', ['build'], () => { return gulp.src(PATHS.TEST_DEST_JS, {read: false}) .pipe(mocha()); }); gulp.task('ci', callback => { return runSequence('test', 'lint', callback); }); function setUpPaths() { const paths = { WEBPACK_CONFIG: './webpack.config.js', APP_SRC: 'app/src', APP_DEST: 'app/lib', CLI_SRC: 'src', CLI_DEST: 'lib', TEST_SRC: 'test', TEST_DEST: 'built-tests' }; paths.APP_MAIN_JS = path.join(paths.APP_SRC, '/main.js'); paths.APP_ALL = paths.APP_SRC + '/**/*'; paths.APP_STATIC_ALL = path.join(paths.APP_SRC, 'static') + '/**/*'; paths.APP_STATIC_JS = path.join(paths.APP_SRC, 'static') + '/**/*.js'; paths.APP_STATIC_DEST = path.join(paths.APP_DEST, 'static'); paths.CLI_SRC_JS = paths.CLI_SRC + '/**/*.js'; paths.TEST_SRC_JS = paths.TEST_SRC + '/**/*.js'; paths.TEST_DEST_JS = paths.TEST_DEST + '/**/*.js'; return paths; }