WHITEPLUS TechBlog

株式会社ホワイトプラスのエンジニアによる開発ブログです。

Webpackの詳細なビルドログを出力する

こんにちは、CX開発Gでエンジニアをしているn-black-catです。

弊社の一部のプロダクトではWebpackを利用してビルドを行っていますが、使用している箇所のビルド時間が長くなっていることが社内で話題に上がりました。 問題の原因を探るために、Webpackのビルドログの詳細を出力したいと考えました。

しかし、その方法を調べる中で、日本語の記事や資料が極端に少なくとても苦労しました。

そこで、これから同じ問題に直面する方のため、また自分のための備忘録として、その方法をこちらに記録しておきたいと思います。

TL;DR

  • コマンドラインでの設定

--stats verboseを追加

webpack --mode=production --config webpack.config.js --stats verbose
  • webpack.config.jsへの設定

statsオプションにvervoseを設定

module.exports = {
  //...
  stats: 'verbose',
};
  • 実行例

statsオプションとは

ビルド時のバンドル情報の表示を制御することができます。

webpack.js.org

オプション一覧

statsオプションには様々な設定があり、以下に、主な設定と出力例を記載していきます。

errors-only

エラーが発生した時のみ出力する

module.exports = {
  //...
  stats: 'errors-only',
};

errors-warnings

警告とエラーのみ出力する

module.exports = {
  //...
  stats: 'errors-warnings',
};

minimal

エラーや新規コンパイルが発生した時のみ出力する

module.exports = {
  //...
  stats: 'minimal',
};

none

何も出力しない stats:false でも代用できます。

module.exports = {
  //...
  stats: 'none',
};
module.exports = {
  //...
  stats: false,
};

normal

標準的な出力 stats:true でも可能

module.exports = {
  //...
  stats: 'normal',
};
module.exports = {
  //...
  stats: true,
};

detailed

chunkModulesとchunkRootModules以外を出力する

module.exports = {
  //...
  stats: 'detailed',
};

summary

webpackのバージョン、警告回数、エラー回数を出力する。

module.exports = {
  //...
  stats: 'summary',
};

原因の特定

今回はverboseオプションを使用して全てのログを出力して原因を特定しました。

出力内容を確認したところほとんどのログが以下のようなものでした。

harmony ~ ログは、WebpackがECMAScript 6(ES6)のコードを解析している際に生成されます。

このことから依存性の解決に時間がかかっており、プログラムサイズを減らすしか根本対応がないことが判明しました。

そのため、特にwebpack側の設定を変更したりはせず対応を終了しました。

おわりに

ホワイトプラスでは、ビジョンバリュー、そしてホワイトプラスの開発文化に共感していただけるエンジニアを募集しています!

ネットクリーニングの「リネット」など「生活領域×テクノロジー」で事業を展開している会社です。どんな会社か気になった方はオウンドメディア「ホワプラSTYLE」をぜひご覧ください。

オンラインでカジュアル面談もできますので、今回の記事の内容に興味を持っていただけたら、ぜひお気軽にお問い合わせください。

www.wh-plus.co.jp