From 44355fd278b55313f15b2f0b18d83be0556b8993 Mon Sep 17 00:00:00 2001 From: Rob Hogan Date: Tue, 20 Sep 2022 07:59:31 -0700 Subject: [PATCH] Make metro-minify-terser the default minifier (#871) Summary: Pull Request resolved: https://github.com/facebook/metro/pull/871 `uglify-es` has not been published for 4 years and is marked deprecated [on npm](https://www.npmjs.com/package/uglify-es). Increasingly it does not support syntax that we would otherwise be able to pass through untranspiled. `terser` is a fork of `uglify-es` that is currently the most downloaded JS minifier ([`terser`](https://www.npmjs.com/package/terser) vs [`uglify-js`](https://www.npmjs.com/package/uglify-js)). It's well-maintained and the common ancestry with `uglify-es`, including very similar configuration options, minimise risk for Metro users. At the same time, it aims to support features right up to Stage 4 proposals. Changelog: **[Breaking]** Switch default minifier from `uglify-es` to `terser` Reviewed By: huntie Differential Revision: D34647616 fbshipit-source-id: 1ecca5d40bc3ab637303efa541163258f5a42f28 --- docs/Configuration.md | 4 ++-- .../src/__tests__/__snapshots__/loadConfig-test.js.snap | 8 ++++---- packages/metro-config/src/defaults/defaults.js | 2 +- packages/metro-minify-terser/package.json | 2 +- packages/metro-transform-worker/package.json | 2 +- .../metro-transform-worker/src/__tests__/index-test.js | 2 +- packages/metro/package.json | 1 + yarn.lock | 8 ++++---- 8 files changed, 15 insertions(+), 14 deletions(-) diff --git a/docs/Configuration.md b/docs/Configuration.md index d452173670..2cf8065e01 100644 --- a/docs/Configuration.md +++ b/docs/Configuration.md @@ -289,9 +289,9 @@ Use the hermes-parser package to use call Hermes parser via WASM instead of the #### `minifierPath` -Type: `string` +Type: `string` (default: `'metro-minify-terser'`) -Path to the minifier that minifies the code after transformation. +Path, or package name resolvable from `metro-transform-worker`, to the minifier that minifies the code after transformation. #### `minifierConfig` diff --git a/packages/metro-config/src/__tests__/__snapshots__/loadConfig-test.js.snap b/packages/metro-config/src/__tests__/__snapshots__/loadConfig-test.js.snap index d7aa4eea67..aac523776b 100644 --- a/packages/metro-config/src/__tests__/__snapshots__/loadConfig-test.js.snap +++ b/packages/metro-config/src/__tests__/__snapshots__/loadConfig-test.js.snap @@ -129,7 +129,7 @@ Object { }, "toplevel": false, }, - "minifierPath": "metro-minify-uglify", + "minifierPath": "metro-minify-terser", "optimizationSizeLimit": 153600, "publicPath": "/assets", "transformVariants": Object { @@ -290,7 +290,7 @@ Object { }, "toplevel": false, }, - "minifierPath": "metro-minify-uglify", + "minifierPath": "metro-minify-terser", "optimizationSizeLimit": 153600, "publicPath": "/assets", "transformVariants": Object { @@ -451,7 +451,7 @@ Object { }, "toplevel": false, }, - "minifierPath": "metro-minify-uglify", + "minifierPath": "metro-minify-terser", "optimizationSizeLimit": 153600, "publicPath": "/assets", "transformVariants": Object { @@ -612,7 +612,7 @@ Object { }, "toplevel": false, }, - "minifierPath": "metro-minify-uglify", + "minifierPath": "metro-minify-terser", "optimizationSizeLimit": 153600, "publicPath": "/assets", "transformVariants": Object { diff --git a/packages/metro-config/src/defaults/defaults.js b/packages/metro-config/src/defaults/defaults.js index 895d011d6f..bed6937d93 100644 --- a/packages/metro-config/src/defaults/defaults.js +++ b/packages/metro-config/src/defaults/defaults.js @@ -60,6 +60,6 @@ exports.moduleSystem = (require.resolve( exports.platforms = ['ios', 'android', 'windows', 'web']; -exports.DEFAULT_METRO_MINIFIER_PATH = 'metro-minify-uglify'; +exports.DEFAULT_METRO_MINIFIER_PATH = 'metro-minify-terser'; exports.defaultCreateModuleIdFactory = defaultCreateModuleIdFactory; diff --git a/packages/metro-minify-terser/package.json b/packages/metro-minify-terser/package.json index 6f3302d601..ed5cde03e3 100644 --- a/packages/metro-minify-terser/package.json +++ b/packages/metro-minify-terser/package.json @@ -13,6 +13,6 @@ }, "license": "MIT", "dependencies": { - "terser": "^5.14.0" + "terser": "^5.15.0" } } diff --git a/packages/metro-transform-worker/package.json b/packages/metro-transform-worker/package.json index 10065cc393..ba6ea809da 100644 --- a/packages/metro-transform-worker/package.json +++ b/packages/metro-transform-worker/package.json @@ -29,7 +29,7 @@ }, "devDependencies": { "metro-memory-fs": "0.72.3", - "metro-minify-uglify": "0.72.3", + "metro-minify-terser": "0.72.3", "metro-react-native-babel-transformer": "0.72.3" } } diff --git a/packages/metro-transform-worker/src/__tests__/index-test.js b/packages/metro-transform-worker/src/__tests__/index-test.js index 78aa848c18..57731dd6cf 100644 --- a/packages/metro-transform-worker/src/__tests__/index-test.js +++ b/packages/metro-transform-worker/src/__tests__/index-test.js @@ -21,7 +21,7 @@ jest inlinePlugin: () => ({}), constantFoldingPlugin: () => ({}), })) - .mock('metro-minify-uglify'); + .mock('metro-minify-terser'); import type {JsTransformerConfig} from '../index'; import typeof TransformerType from '../index'; diff --git a/packages/metro/package.json b/packages/metro/package.json index 6a57f667fe..e6efb85767 100644 --- a/packages/metro/package.json +++ b/packages/metro/package.json @@ -44,6 +44,7 @@ "metro-file-map": "0.72.3", "metro-hermes-compiler": "0.72.3", "metro-inspector-proxy": "0.72.3", + "metro-minify-terser": "0.72.3", "metro-minify-uglify": "0.72.3", "metro-react-native-babel-preset": "0.72.3", "metro-resolver": "0.72.3", diff --git a/yarn.lock b/yarn.lock index b3cf5e3aa0..b20f51efbf 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7845,10 +7845,10 @@ terminal-link@^2.0.0: ansi-escapes "^4.2.1" supports-hyperlinks "^2.0.0" -terser@^5.14.0: - version "5.14.2" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.14.2.tgz#9ac9f22b06994d736174f4091aa368db896f1c10" - integrity sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA== +terser@^5.15.0: + version "5.15.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.15.0.tgz#e16967894eeba6e1091509ec83f0c60e179f2425" + integrity sha512-L1BJiXVmheAQQy+as0oF3Pwtlo4s3Wi1X2zNZ2NxOB4wx9bdS9Vk67XQENLFdLYGCK/Z2di53mTj/hBafR+dTA== dependencies: "@jridgewell/source-map" "^0.3.2" acorn "^8.5.0"