Islands in the byte stream

Technical notes by a software engineer

Reactをv16にアップグレードしたらuglifyjsの秘孔をついてハマった件

追記: Terser v3.10.11 でこの問題が修正されていることを確認しました。現在は collapse_vars: false というワークアラウンドは不要になりました。


webpackのproduction buildの話です。

Reactが悪いわけではないんですが、たまたま秘孔をつくコードがReactないし関連するReact v16に依存するライブラリにあったんでしょうね。

というわけで webpack.config.js の optimization の設定はこんな感じにしました。

if (production)
  config.optimization = {
    minimizer: [
      new TerserPlugin({
        terserOptions: {
          sourceMap: true,
          parallel: true,
          compress: {
            collapse_vars: false, // workaround for a minifier's bug: https://github.com/terser-js/terser/issues/120
            drop_console: true,
          },
        },
      }),
    ],
    noEmitOnErrors: true,
  };
  // ...
}