This article will give you a detailed introduction to three commonly used JS compression plug-ins in webpack. It has certain reference value. Friends in need can refer to it. I hope it will be helpful to everyone.
Here are three types of JS packaging plug-ins:
Support:babel present2015
,webpack3
Disadvantages:
It uses a single-threaded compression code, that is Say multiple js files need to be compressed, it needs to be compressed one by one. Therefore, packaging and compressing code in a formal environment is very slow (because compressing JS code requires first parsing the code into an AST syntax tree represented by Object abstraction, and then applying various rules to analyze and process the AST, making this process very time-consuming) .
Advantages:Old project support (compatible with IOS10)
Usage:
npm i uglifyjs-webpack- plugin
module.exports = { plugins: [ new webpack.optimize.UglifyJsPlugin({ sourceMap: true, compress: { warnings: false } }), ] }
[Recommended learning:javascript advanced tutorial】
Support:babel7
,webpack4
##Disadvantages:Not supported by old projects (not compatible with IOS10)
Advantages:
The ParallelUglifyPlugin plug-in will open multiple sub-processes and assign the compression work of multiple files to multiple sub-processes to complete, but each sub-process will still pass UglifyJS decompresses code. It's nothing more than parallel processing that needs to be compressed. Processing multiple subtasks in parallel will increase efficiency even more.Usage:
1、npm i -D webpack-parallel-uglify-plugin
webpack.config.jsFile
// 引入 ParallelUglifyPlugin 插件 const ParallelUglifyPlugin = require('webpack-parallel-uglify-plugin'); module.exports = { plugins: [ // 使用 ParallelUglifyPlugin 并行压缩输出JS代码 new ParallelUglifyPlugin({ // 传递给 UglifyJS的参数如下: uglifyJS: { output: { /* 是否输出可读性较强的代码,即会保留空格和制表符,默认为输出,为了达到更好的压缩效果, 可以设置为false */ beautify: false, /* 是否保留代码中的注释,默认为保留,为了达到更好的压缩效果,可以设置为false */ comments: false }, compress: { /* 是否在UglifyJS删除没有用到的代码时输出警告信息,默认为输出,可以设置为false关闭这些作用 不大的警告 */ warnings: false, /* 是否删除代码中所有的console语句,默认为不删除,开启后,会删除所有的console语句 */ drop_console: true, /* 是否内嵌虽然已经定义了,但是只用到一次的变量,比如将 var x = 1; y = x, 转换成 y = 5, 默认为不 转换,为了达到更好的压缩效果,可以设置为false */ collapse_vars: true, /* 是否提取出现了多次但是没有定义成变量去引用的静态值,比如将 x = 'xxx'; y = 'xxx' 转换成 var a = 'xxxx'; x = a; y = a; 默认为不转换,为了达到更好的压缩效果,可以设置为false */ reduce_vars: true } } }), ] }
new ParallelUglifyPlugin({ uglifyJS: {}, test: /.js$/g, include: [], exclude: [], cacheDir: '', workerCount: '', sourceMap: false });
Support:babel7,
webpack4
Not supported by old projects (not compatible with IOS10)
Advantages:
npm install terser-webpack-plugin --save-dev
optimization: { minimize: true, minimizer: [ new TerserPlugin({ terserOptions: { ecma: 5, warnings: false, parse: {}, compress: {}, mangle: true, // Note `mangle.properties` is `false` by default. module: false, output: null, toplevel: false, nameCache: null, ie8: false, keep_fnames: false, safari10: true } }) ] }
For more programming-related knowledge, please visit:
Programming VideoThe above is the detailed content of Detailed explanation of 3 JS compression plug-ins commonly used in webpack. For more information, please follow other related articles on the PHP Chinese website!