What is gulp-uglify?
The gulp-uglify package is a Gulp plugin that minifies JavaScript files using UglifyJS. It helps in reducing the file size of JavaScript files by removing unnecessary characters, comments, and whitespace, making the code more efficient for production environments.
What are gulp-uglify's main functionalities?
Basic Minification
This feature allows you to minify JavaScript files. The code sample demonstrates how to create a Gulp task that takes JavaScript files from the 'src' directory, minifies them using gulp-uglify, and outputs the minified files to the 'dist' directory.
const gulp = require('gulp');
const uglify = require('gulp-uglify');
gulp.task('minify-js', function() {
return gulp.src('src/*.js')
.pipe(uglify())
.pipe(gulp.dest('dist'));
});
Handling Errors
This feature demonstrates how to handle errors during the minification process. By using the 'gulp-plumber' package, you can prevent the Gulp process from stopping when an error occurs, allowing for smoother development workflows.
const gulp = require('gulp');
const uglify = require('gulp-uglify');
const plumber = require('gulp-plumber');
gulp.task('minify-js', function() {
return gulp.src('src/*.js')
.pipe(plumber())
.pipe(uglify())
.pipe(gulp.dest('dist'));
});
Source Maps
This feature allows you to generate source maps for the minified JavaScript files. Source maps help in debugging by mapping the minified code back to the original source code. The code sample shows how to initialize source maps, minify the JavaScript files, and write the source maps to the output directory.
const gulp = require('gulp');
const uglify = require('gulp-uglify');
const sourcemaps = require('gulp-sourcemaps');
gulp.task('minify-js', function() {
return gulp.src('src/*.js')
.pipe(sourcemaps.init())
.pipe(uglify())
.pipe(sourcemaps.write('./'))
.pipe(gulp.dest('dist'));
});
Other packages similar to gulp-uglify
terser
Terser is a JavaScript parser and mangler/compressor toolkit for ES6+. It is a popular alternative to UglifyJS and is known for its better support for modern JavaScript syntax. Terser can be used with Gulp through the 'gulp-terser' plugin, offering similar functionalities to gulp-uglify but with improved ES6+ support.
babel-minify
Babel-Minify is a minifier based on the Babel toolchain. It is designed to work seamlessly with Babel, making it a good choice for projects that already use Babel for transpiling. Babel-Minify can be integrated with Gulp using the 'gulp-babel-minify' plugin, providing an alternative to gulp-uglify with better integration for Babel users.
uglify-es
Uglify-ES is a fork of UglifyJS that adds support for ES6+ syntax. It is no longer actively maintained, but it was created to address the need for minifying modern JavaScript code. While gulp-uglify does not support ES6+ syntax, Uglify-ES can be used with Gulp through the 'gulp-uglify-es' plugin for projects that require ES6+ support.
gulp-uglify
Minify JavaScript with UglifyJS3.
Installation
Install package with NPM and add it to your development dependencies:
npm install --save-dev gulp-uglify
Usage
var gulp = require('gulp');
var uglify = require('gulp-uglify');
var pipeline = require('readable-stream').pipeline;
gulp.task('compress', function () {
return pipeline(
gulp.src('lib/*.js'),
uglify(),
gulp.dest('dist')
);
});
To help properly handle error conditions with Node streams, this project
recommends the use of
pipeline
,
from readable-stream
.
Options
Most of the minify options from
the UglifyJS API are supported. There are a few exceptions:
- The
sourceMap
option must not be set, as it will be automatically configured
based on your Gulp configuration. See the documentation for Gulp sourcemaps.
Errors
gulp-uglify
emits an 'error' event if it is unable to minify a specific file.
The GulpUglifyError constructor is exported by this plugin for instanceof
checks.
It contains the following properties:
fileName
: The full file path for the file being minified.cause
: The original UglifyJS error, if available.
Most UglifyJS error messages have the following properties:
message
(or msg
)filename
line
To see useful error messages, see Why Use Pipeline?.
Using a Different UglifyJS
By default, gulp-uglify
uses the version of UglifyJS installed as a dependency.
It's possible to configure the use of a different version using the "composer" entry point.
var uglifyjs = require('uglify-js');
var composer = require('gulp-uglify/composer');
var pump = require('pump');
var minify = composer(uglifyjs, console);
gulp.task('compress', function (cb) {
var options = {};
pump([
gulp.src('lib/*.js'),
minify(options),
gulp.dest('dist')
],
cb
);
});