Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

gulp-terser-js

gulp-community9.5kMIT5.2.2

A Terser-js plugin for Gulp

gulpplugin, gulp, terser

readme

gulp-terser-js

NPM Version NPM Downloads Linux Build Test Coverage

A Terser-js plugin for Gulp

Why choose terser?

uglify-es is no longer maintained and uglify-js does not support ES6+.

terser is a fork of uglify-es that retains API and CLI compatibility with uglify-es and uglify-js@3. Source:Why choose terser?

Why choose gulp-terser-js

This plugin displays formatted error:

error screenshot

Installation

npm install gulp-terser-js

Basic Usage

const terser = require('gulp-terser-js')

const minifyJS = () =>
  gulp.src('asset/js/*.js')
    .pipe(terser({
       mangle: {
         toplevel: true
       }
    }))
    .on('error', function (error) {
      this.emit('end')
    })
    .pipe(gulp.dest('public/js/'))


gulp.task('minifyJS', minifyJS)

Options

The options you can use can be found here.

Avanced Usage

const gulp = require('gulp')
const concat = require('gulp-concat')
const sourcemaps = require('gulp-sourcemaps')
const terser = require('gulp-terser-js')

const sourceMapOpt = {
  sourceMappingURL: (file) => 'http://127.0.0.1/map/' + file.relative + '.map'
}
const mapsFolder = './public/map'

const minifyJS = () =>  
  gulp.src('./asset/js/*.js')
    .pipe(gulp.dest(mapsFolder))
    .pipe(sourcemaps.init())
    .pipe(concat('script.js'))
    .pipe(terser({
      mangle: {
        toplevel: true
      }
    }))
    .on('error', function (error) {
      if (error.plugin !== "gulp-terser-js") {
        console.log(error.message)
      }
      this.emit('end')
    })
    .pipe(sourcemaps.write(mapsFolder, sourceMapOpt))
    .pipe(gulp.dest('./public/js/'))

gulp.task('minifyJS', minifyJS)

Source maps

When running Terser on compiled Javascript, you may run into issues with source maps. If you need to pass the content of your source maps to Terser, first you must set the loadMaps option to true when initializing gulp-sourcemaps. Next, make the content source map option true when piping Terser.

A basic setup may look like this:

gulp.src('asset/js/*.js')
  .pipe(sourcemaps.init({ loadMaps: true }))
  .pipe(terser({
     sourceMap: {
       content: true
     }
  }))
  .pipe(sourcemaps.write())
  .pipe(gulp.dest('dist'))

Can I use terser to format error of an other gulp module ?

// ... 
const less = require('gulp-less');

const generateCSS = () =>  
  gulp.src("./asset/css/*.less", srcOptions)
    .pipe(less()).on("error", printLESSError)
    .pipe(postcss([cssnano]))
    .pipe(sourcemaps.write(path.relative(srcOptions.cwd, mapsFolder), sourceMapOpt))
    .pipe(gulp.dest(outputBuildFolder))

function printLESSError(error) {
  if (error.plugin === "gulp-less") {
    terser.printError.call(this, {
      name: error.type,
      line: error.line,
      col: error.column,
      filePath: error.filename,
      fileContent: '' + fs.readFileSync(error.filename),
      message: (error.message || '').replace(error.filename, path.basename(error.filename)).split(' in file')[0],
      plugin: error.plugin
    })
  } else {
    console.log(error.message);
  }
  this.emit('end')
}

Version

Description gulp-terser-js
Node Version >= 8.10.0
Terser Version 4.1.4+
Gulp Version >= 4.X

changelog

Change Log

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog and this project adheres to Semantic Versioning.

[5.2.2] - 2020-04-30

Changed

  • Transfert repo from A-312/gulp-terser-js to gulp-community/gulp-terser-js
  • Update README.md

[5.2.1] - 2020-04-30

Fixed

  • Error display original position

[5.2.0] - 2020-04-30

Changed

  • Add content to sourcemaps #19
  • Add lerna to publish instead npm
  • Caret Version Dependencies

[5.1.2] - 2020-01-19

Changed

  • Change plugin name send with an error. #16
  • Fix forgotten argument with an error (allow to continue the gulp script).

[5.1.1] - 2020-01-18

Changed

  • Improve tests and coverage to 100%. #9

[5.1.0] - 2020-01-18

Changed

  • Update dependencies version (Terser is now on 4.6.3) #13
  • Improve coverage. #9
  • Remove object-assign dependency

[5.0.1] - 2019-11-13

Fixed

  • Fix bug with mixed EOL on Windows for printError #12

5.0.0 - 2019-08-14

Changed

  • Update dependencies version (Terser is now on 4.1.4) #8
  • Add test, coverage in travis #8

4.1.1 - 2019-08-13

Fixed

  • Fix printError and improve readme(caused by #3) #5

Added

  • Add API for printError: require('gulp-terser-js').printError #5

4.1.0 - 2019-08-09

Added

  • Add printError #3