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 the tutorial online, you can add an obfuscation plugin to the webpack configuration file. At first, I couldn't find the configuration file, but later I found out that I need to run npm run eject to inject the configuration file into the project. I'm 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({
  // Minify
  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, you can use others as well
    return require("uglify-js").minify(file, uglifyJsOptions);
  },
  // Enable this to speed up compilation time, it's CPU intensive so adjust the cpucore number accordingly
  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.