text: var gulp        = require('gulp');
  var gutil       = require('gulp-util');
  var source      = require('vinyl-source-stream');
  var babelify    = require('babelify');
  var watchify    = require('watchify');
  var exorcist    = require('exorcist');
  var browserify  = require('browserify');
  var browserSync = require('browser-sync').create();
  
  // Watchify args contains necessary cache options to achieve fast incremental bundles.
  // See watchify readme for details. Adding debug true for source-map generation.
  watchify.args.debug = true;
  // Input file.
  var bundler = watchify(browserify('./app/js/app.js', watchify.args));
  
  // Babel transform
  bundler.transform(babelify.configure({
      sourceMapRelative: 'app/js'
  }));
  
  // On updates recompile
  bundler.on('update', bundle);
  
  function bundle() {
  
      gutil.log('Compiling JS...');
  
      return bundler.bundle()
          .on('error', function (err) {
              gutil.log(err.message);
              browserSync.notify("Browserify Error!");
              this.emit("end");
          })
          .pipe(exorcist('app/js/dist/bundle.js.map'))
          .pipe(source('bundle.js'))
          .pipe(gulp.dest('./app/js/dist'))
          .pipe(browserSync.stream({once: true}));
  }
  
  /**
   * Gulp task alias
   */
  gulp.task('bundle', function () {
      return bundle();
  });
  
  /**
   * First bundle, then serve from the ./app directory
   */
  gulp.task('default', ['bundle'], function () {
      browserSync.init({
          server: "./app"
      });
  });