banner
RustyNail

RustyNail

coder. 【blog】https://rustynail.me 【nostr】wss://ts.relays.world/ wss://relays.world/nostr

React project configuration for create-react-app cli

This blog is a react project created using create-react-app. According to online tutorials, you can add obfuscation plugins to the webpack configuration file. At first, I couldn't find the configuration file, but later I found out that I needed to run npm run eject to inject the configuration file into the project. I'm still not very familiar with the frontend toolchain.

Now you can configure plugins in the webpack configuration file under the config directory of the project. Simply search for the optimization configuration option. The project already has a TerserPlugin configured, so you can directly modify it like this:

new TerserPlugin({
    // Compression
    minify: (file, sourceMap) => {
        // https://github.com/mishoo/UglifyJS2#minify-options
        const uglifyJsOptions = {
            /* your `uglify-js` package options */
        };

        if (sourceMap) {
            uglifyJsOptions.sourceMap = {
                content: sourceMap,
            };
        }
        // Here we are using uglify-js, but it's the same with other options
        return require("uglify-js").minify(file, uglifyJsOptions);
    },
    // Enabling this can speed up compilation time, it's CPU intensive so around the number of CPU cores is good
    parallel: 16,

    terserOptions: {
        // Remove comments
        format: {
            comments: false,
        },
        parse: {
            // We want terser to parse ecma 8 code. However, we don't want it
            // to apply any minification steps that turns valid ecma 5 code
            // into invalid ecma 5 code. This is why the 'compress' and 'output'
            // sections only apply transformations that are ecma 5 safe
            // https://github.com/facebook/create-react-app/pull/4234
            ecma: 8,
        },
        compress: {
            ecma: 5,
            warnings: false,
            // Disabled because of an issue with Uglify breaking seemingly valid code:
            // https://github.com/facebook/create-react-app/issues/2376
            // Pending further investigation:
            // https://github.com/mishoo/UglifyJS2/issues/2011
            comparisons: false,
            // Disabled because of an issue with Terser breaking valid code:
            // https://github.com/facebook/create-react-app/issues/5250
            // Pending further investigation:
            // https://github.com/terser-js/terser/issues/120
            inline: 2,
        },
        mangle: {
            safari10: true,
        },
        // Added for profiling in devtools
        keep_classnames: isEnvProductionProfile,
        keep_fnames: isEnvProductionProfile,
        output: {
            ecma: 5,
            comments: false,
            // Turned on because emoji and regex is not minified properly using default
            // https://github.com/facebook/create-react-app/issues/2488
            ascii_only: true,
        },
    },
    sourceMap: shouldUseSourceMap,
}),
// This is only used in production mode
new OptimizeCSSAssetsPlugin({
    cssProcessorOptions: {
        parser: safePostCssParser,
        map: shouldUseSourceMap
            ? {
                // `inline: false` forces the sourcemap to be output into a
                // separate file
                inline: false,
                // `annotation: true` appends the sourceMappingURL to the end of
                // the css file, helping the browser find the sourcemap
                annotation: true,
            }
            : false,
    },
    cssProcessorPluginOptions: {
        preset: ['default', { minifyFontValues: { removeQuotes: false } }],
    },
}),

Of course, besides this default plugin, you can also import other plugins, such as uglifyjs-webpack-plugin.

Loading...
Ownership of this post data is guaranteed by blockchain and smart contracts to the creator alone.