# gulp-terser-js

> A Terser-js plugin for Gulp

Latest version **5.2.2** (published 2020-05-08) · MIT license · 0 weekly downloads

## Install

```sh
npm install gulp-terser-js
pnpm add gulp-terser-js
yarn add gulp-terser-js
bun add gulp-terser-js
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 5.2.2 |
| Published | 2020-05-08 |
| First published | 2019-01-11 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 5 |
| Unpacked size | 12.1 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 12 |
| Author | A-312 |
| Maintainers | a-312 |
| Keywords | gulpplugin, gulp, terser |

## Links

- npm: https://www.npmjs.com/package/gulp-terser-js
- Repository: https://github.com/gulp-community/gulp-terser-js
- Homepage: https://github.com/gulp-community/gulp-terser-js#readme
- Issues: https://github.com/gulp-community/gulp-terser-js/issues
- npm.io page: https://npm.io/package/gulp-terser-js

## Dependencies (5)

- [terser](https://npm.io/package/terser.md) ^4.6.12
- [through2](https://npm.io/package/through2.md) ^3.0.1
- [source-map](https://npm.io/package/source-map.md) ^0.7.3
- [plugin-error](https://npm.io/package/plugin-error.md) ^1.0.1
- [vinyl-sourcemaps-apply](https://npm.io/package/vinyl-sourcemaps-apply.md) ^0.2.1

## Recent versions

- 5.2.2 (latest) — 2020-05-08
- 5.2.1 — 2020-04-30
- 5.2.0 — 2020-04-30
- 5.1.2 — 2020-01-19
- 5.1.1 — 2020-01-18
- 5.1.0 — 2020-01-18
- 5.0.1 — 2019-11-13
- 5.0.0 — 2019-08-13
- 4.1.1 — 2019-08-13
- 4.1.0 — 2019-08-09
- 4.0.2 — 2019-06-07
- 4.0.1 — 2019-01-11

## README

# gulp-terser-js

  [![NPM Version][npm-image]][npm-url]
  [![NPM Downloads][downloads-image]][downloads-url]
  [![Linux Build][travis-image]][travis-url]
  [![Test Coverage][coveralls-image]][coveralls-url]

A [Terser-js](https://github.com/terser/terser) plugin for Gulp

[npm-image]: https://img.shields.io/npm/v/gulp-terser-js.svg
[npm-url]: https://npmjs.org/package/gulp-terser-js
[downloads-image]: https://img.shields.io/npm/dm/gulp-terser-js.svg
[downloads-url]: https://npmjs.org/package/gulp-terser-js
[travis-image]: https://img.shields.io/travis/com/gulp-community/gulp-terser-js/master.svg?label=linux
[travis-url]: https://travis-ci.com/gulp-community/gulp-terser-js
[coveralls-image]: https://img.shields.io/coveralls/gulp-community/gulp-terser-js/master.svg
[coveralls-url]: https://coveralls.io/r/gulp-community/gulp-terser-js?branch=master

## Why choose terser?

> `uglify-es` is [no longer maintained](https://github.com/mishoo/UglifyJS2/issues/3156#issuecomment-392943058) 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?](https://github.com/terser-js/terser/blob/master/README.md#why-choose-terser)

## Why choose `gulp-terser-js`

This plugin displays formatted error:

![error screenshot](https://i.imgur.com/eZUpLmB.png)

## Installation

```
npm install gulp-terser-js
```

## Basic Usage

```js
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](https://github.com/terser-js/terser#parse-options).

## Avanced Usage

```js
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:
```js
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 ?

```js
// ... 
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         |

---
_Source: https://npm.io/package/gulp-terser-js · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
