Skip to content

Commit

Permalink
Merge pull request #792 from webpack/feature/replace-uglify-with-terser
Browse files Browse the repository at this point in the history
Feature/replace uglify with terser
  • Loading branch information
evenstensberg committed Mar 16, 2019
2 parents 2106e70 + 89e6b74 commit 05b92af
Show file tree
Hide file tree
Showing 5 changed files with 27 additions and 23 deletions.
8 changes: 4 additions & 4 deletions packages/generators/init-generator.ts
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ export default class InitGenerator extends Generator {
this.dependencies = [
"webpack",
"webpack-cli",
"uglifyjs-webpack-plugin",
"terser-webpack-plugin",
"babel-plugin-syntax-dynamic-import",
];
this.configuration = {
Expand Down Expand Up @@ -430,12 +430,12 @@ export default class InitGenerator extends Generator {
public installPlugins() {
if (this.isProd) {
this.dependencies = this.dependencies.filter(
(p: string) => p !== "uglifyjs-webpack-plugin",
(p: string) => p !== "terser-webpack-plugin",
);
} else {
this.configuration.config.topScope.push(
tooltip.uglify(),
"const UglifyJSPlugin = require('uglifyjs-webpack-plugin');",
tooltip.terser(),
"const TerserPlugin = require('terser-webpack-plugin');",
"\n",
);
}
Expand Down
4 changes: 2 additions & 2 deletions packages/generators/utils/plugins.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@
* Callable function with the initial plugins
*
* @returns {Function} An function that returns an array
* that consists of the uglify plugin
* that consists of terser-webpack-plugin
*/

export default function(_?: void): string[] {
return ["new UglifyJSPlugin()"];
return ["new TerserPlugin()"];
}
6 changes: 3 additions & 3 deletions packages/generators/utils/tooltip.ts
Original file line number Diff line number Diff line change
Expand Up @@ -50,12 +50,12 @@ export default {
*/`;
},

uglify: (_?: void): string => {
terser: (_?: void): string => {
return `/*
* We've enabled UglifyJSPlugin for you! This minifies your app
* We've enabled TerserPlugin for you! This minifies your app
* in order to load faster and run less javascript.
*
* https://github.com/webpack-contrib/uglifyjs-webpack-plugin
* https://github.com/webpack-contrib/terser-webpack-plugin
*
*/`;
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,13 @@ exports[`uglifyJsPlugin transforms correctly using "uglifyJsPlugin-0" data 1`] =
`;

exports[`uglifyJsPlugin transforms correctly using "uglifyJsPlugin-1" data 1`] = `
"const UglifyJsPlugin = require('uglifyjs-webpack-plugin');
"const TerserPlugin = require('terser-webpack-plugin');
module.exports = {
devtool: \\"source-map\\",
optimization: {
minimize: true,
minimizer: [new UglifyJsPlugin({
minimizer: [new TerserPlugin({
sourceMap: true,
compress: {}
})]
Expand All @@ -26,13 +26,13 @@ module.exports = {
`;

exports[`uglifyJsPlugin transforms correctly using "uglifyJsPlugin-2" data 1`] = `
"const Uglify = require('uglifyjs-webpack-plugin');
"const TerserPlugin = require('terser-webpack-plugin');
module.exports = {
devtool: \\"source-map\\",
optimization: {
minimize: true,
minimizer: [new Uglify({
minimizer: [new TerserPlugin({
sourceMap: true,
compress: {}
})]
Expand Down Expand Up @@ -78,7 +78,7 @@ exports[`uglifyJsPlugin transforms correctly using "uglifyJsPlugin-3" data 1`] =
`;

exports[`uglifyJsPlugin transforms correctly using "uglifyJsPlugin-4" data 1`] = `
"const UglifyJsPlugin = require('uglifyjs-webpack-plugin');
"const TerserPlugin = require('terser-webpack-plugin');
module.exports = {
devtool: 'eval',
Expand Down Expand Up @@ -110,7 +110,7 @@ module.exports = {
optimization: {
minimize: true,
minimizer: [new UglifyJsPlugin({
minimizer: [new TerserPlugin({
sourceMap: true
})]
}
Expand Down
20 changes: 12 additions & 8 deletions packages/migrate/uglifyJsPlugin/uglifyJsPlugin.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,8 @@ import { IJSCodeshift, INode } from "../types/NodePath";
* and adds `optimization.minimize: true` to config
*
* If any configuration is passed to UglifyWebpackPlugin
* plugin instantiation is moved to `optimization.minimizer`.
* UglifyWebpackPlugin is replaced with TerserPlugin
* and plugin instantiation is moved to `optimization.minimizer`.
*
* @param {Object} j - jscodeshift top-level import
* @param {Node} ast - jscodeshift ast to transform
Expand Down Expand Up @@ -63,17 +64,20 @@ export default function(j: IJSCodeshift, ast: INode): INode {
* If user is using UglifyJsPlugin directly from webpack
* transformation must:
* - remove it
* - add require for uglify-webpack-plugin
* - add require for terser-webpack-plugin
* - add to minimizer
*/
if (pluginVariableAssignment && pluginVariableAssignment.includes("webpack")) {
// create require for uglify-webpack-plugin
if (pluginVariableAssignment) {
// remove require for uglify-webpack-plugin
searchForRequirePlugin.remove();

// create require for terser-webpack-plugin
const pathRequire: INode = getRequire(
j,
"UglifyJsPlugin",
"uglifyjs-webpack-plugin",
"TerserPlugin",
"terser-webpack-plugin",
);
// append to source code.
// prepend to source code.
ast
.find(j.Program)
.replaceWith((p: INode): INode =>
Expand All @@ -84,7 +88,7 @@ export default function(j: IJSCodeshift, ast: INode): INode {
"init",
j.identifier("minimizer"),
j.arrayExpression([
j.newExpression(j.identifier("UglifyJsPlugin"), [pluginOptions[0]]),
j.newExpression(j.identifier("TerserPlugin"), [pluginOptions[0]]),
]),
);
} else {
Expand Down

0 comments on commit 05b92af

Please sign in to comment.