Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

how to uglify javascript classes?

I'm writing basic javascript using the classes syntax and trying to uglify it with gulp, but getting this error:

events.js:72
throw er; // Unhandled 'error' event

I simply used the example code from mozilla's website:

class Polygon {
  constructor(height, width) {
    this.height = height;
    this.width = width;
  }
}

And nothing special about my gulp file - works perfectly for any non-class js:

// Include gulp
var gulp = require('gulp');

// Include Our Plugins
var jshint = require('gulp-jshint');
var concat = require('gulp-concat');
var uglify = require('gulp-uglify');
var rename = require('gulp-rename');

// Lint Task
gulp.task('lint', function() {
    return gulp.src('js/*.js')
        .pipe(jshint())
        .pipe(jshint.reporter('default'));
});

// Concatenate & Minify JS
gulp.task('scripts', function() {
    return gulp.src('js/*.js')
        .pipe(concat('all.js'))
        .pipe(gulp.dest('dist/js'))
        .pipe(rename('all.min.js'))
        .pipe(uglify())
        .pipe(gulp.dest('dist/js'));
});

// Watch Files For Changes
gulp.task('watch', function() {
    gulp.watch('js/*.js', ['lint', 'scripts']);
    gulp.watch('scss/*.scss', ['sass']);
});

// Default Task
gulp.task('default', ['lint', 'scripts', 'watch']);
like image 492
Jeff Puckett Avatar asked Apr 07 '16 16:04

Jeff Puckett


1 Answers

At the time, I resolved this with a workaround by transpiling to ECMA 5 with Babel.

Later I discovered it was not a problem with my Node environment as the comments led me to believe, but in fact it was because the default uglify branch used in gulp-uglify doesn't support ECMA 6 yet.

The correct solution was to instead use the harmony branch of UglifyJS2 or to use the npm wrapper uglify-js-harmony.

like image 165
Jeff Puckett Avatar answered Oct 03 '22 21:10

Jeff Puckett