diff --git a/docusaurus/docs/minify-keep-class-names.md b/docusaurus/docs/minify-keep-class-names.md new file mode 100644 index 00000000000..a240a9eb876 --- /dev/null +++ b/docusaurus/docs/minify-keep-class-names.md @@ -0,0 +1,23 @@ +--- +id: minify-keep-class-names +title: Minify Keep Class names +--- + +The production build of Create React App uses the [terser-js](https://github.com/terser-js/terser) Webpack Plugin to minify the JS / TS sources. By default the class anmes are minified and replaced. If you want to keep the JavaScript Class Names you can set the env variable `KEEP_CLASS_NAMES` before you run the production build. + +Example with [cross-env](https://github.com/kentcdodds/cross-env#readme): + +```sh +cross-env KEEP_CLASS_NAMES='true' && react-scripts build +``` + +In the `package.json` this would look like: + +```json +{ + ... + "scripts": { + "build": "cross-env KEEP_CLASS_NAMES='true' react-scripts build" + } +} +``` diff --git a/docusaurus/website/sidebars.json b/docusaurus/website/sidebars.json index 53cbd68ffe1..511ac77951e 100644 --- a/docusaurus/website/sidebars.json +++ b/docusaurus/website/sidebars.json @@ -36,7 +36,8 @@ "adding-a-router", "adding-custom-environment-variables", "making-a-progressive-web-app", - "production-build" + "production-build", + "minify-keep-class-names" ], "Testing": ["running-tests", "debugging-tests"], "Back-End Integration": [ diff --git a/packages/react-scripts/config/webpack.config.js b/packages/react-scripts/config/webpack.config.js index 771b06c94d1..ea72b58b406 100644 --- a/packages/react-scripts/config/webpack.config.js +++ b/packages/react-scripts/config/webpack.config.js @@ -44,6 +44,9 @@ const shouldUseSourceMap = process.env.GENERATE_SOURCEMAP !== 'false'; // makes for a smoother build process. const shouldInlineRuntimeChunk = process.env.INLINE_RUNTIME_CHUNK !== 'false'; +// For keeping classNames while minifying the sources for production build +const terserKeepClassNames = process.env.KEEP_CLASS_NAMES === 'true'; + const imageInlineSizeLimit = parseInt( process.env.IMAGE_INLINE_SIZE_LIMIT || '10000' ); @@ -195,6 +198,7 @@ module.exports = function(webpackEnv) { // This is only used in production mode new TerserPlugin({ terserOptions: { + keep_fnames: terserKeepClassNames, parse: { // we want terser to parse ecma 8 code. However, we don't want it // to apply any minfication steps that turns valid ecma 5 code