banner
RustyNail

RustyNail

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

create-react-app cliで作成されたReactプロジェクトの設定jsの圧縮

このブログは、create-react-app で作成された React プロジェクトです。インターネットのチュートリアルに従って、webpack の設定ファイルに難読化プラグインを追加することができます。最初は設定ファイルが見つからず、後でプロジェクトに組み込むために npm run eject を実行する必要があることがわかりました。フロントエンドのツールチェーンはまだよくわかっていませんね。

今、プロジェクトの config ディレクトリの webpack 設定ファイルでプラグインを設定できます。optimization の設定項目を直接検索し、プロジェクトにはすでに TerserPlugin が設定されていますので、次のように変更してください。

new TerserPlugin({
					// 圧縮
          minify: (file, sourceMap) => {
            // https://github.com/mishoo/UglifyJS2#minify-options
            const uglifyJsOptions = {
              /* あなたの `uglify-js` パッケージのオプション */
            };
  
            if (sourceMap) {
              uglifyJsOptions.sourceMap = {
                content: sourceMap,
              };
            }
  					// ここではuglify-jsを使用していますが、他のものでも同じです
            return require("uglify-js").minify(file, uglifyJsOptions);
          },
          // これをオンにするとコンパイル時間が短縮されます。計算集約型なので、cpucore numerを調整するだけで十分です
          parallel: 16,
          
          terserOptions: {
          	// コメントを削除
            format: {
              comments: false,
            },
            parse: {
              // terserにecma 8コードを解析させたい。ただし、有効なecma 5コードを無効なecma 5コードに変換するような最小化ステップは適用したくない。これが 'compress' と 'output' セクションが ecma 5 に安全な変換のみを適用する理由です。
              // https://github.com/facebook/create-react-app/pull/4234
              ecma: 8,
            },
            compress: {
              ecma: 5,
              warnings: false,
              // 有効なコードを壊すUglifyの問題のため無効化:
              // https://github.com/facebook/create-react-app/issues/2376
              // 追加の調査が必要:
              // https://github.com/mishoo/UglifyJS2/issues/2011
              comparisons: false,
              // 有効なコードを壊すTerserの問題のため無効化:
              // https://github.com/facebook/create-react-app/issues/5250
              // 追加の調査が必要:
              // https://github.com/terser-js/terser/issues/120
              inline: 2,
            },
            mangle: {
              safari10: true,
            },
            // プロファイリングのために追加
            keep_classnames: isEnvProductionProfile,
            keep_fnames: isEnvProductionProfile,
            output: {
              ecma: 5,
              comments: false,
              // 絵文字と正規表現はデフォルトでは適切に最小化されないためオンにする
              // https://github.com/facebook/create-react-app/issues/2488
              ascii_only: true,
            },
          },
          sourceMap: shouldUseSourceMap,
        }),
        // これは本番モードでのみ使用されます
        new OptimizeCSSAssetsPlugin({
          cssProcessorOptions: {
            parser: safePostCssParser,
            map: shouldUseSourceMap
              ? {
                  // `inline: false` はsourcemapを別のファイルに出力するようにします
                  inline: false,
                  // `annotation: true` はブラウザがsourcemapを見つけるのを助けるため、cssファイルの末尾にsourceMappingURLを追加します
                  annotation: true,
                }
              : false,
          },
          cssProcessorPluginOptions: {
            preset: ['default', { minifyFontValues: { removeQuotes: false } }],
          },
        }),

もちろん、デフォルトのプラグイン以外にも、uglifyjs-webpack-plugin のような他のプラグインを自分でインポートすることもできます。

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。