自作プラグインの webpack v4 対応をしました

自作の license-info-webpack-plugin を webpack v4 に対応させました。

www.npmjs.com

yami-beta.hateblo.jp

手順

webpack v4 対応する上でそのままでは動かないことは容易に予想できていたので、以下の順で段階的に対応を進めました。

  1. webpack v3 用のテストを書く github.com
  2. 複数バージョンの webpack でテスト出来るようにテストコードを修正 github.com
  3. webpack v4 用のテストを書き、v3, v4 の両対応をする github.com

webpack v4 での変更点

plugin や loader における対応は、以下のページにまとまっています。

medium.com

一番大きな変更点は

// webpack v3
compiler.plugin("compilation", compilation => {
  // ...
})

// webpack v4
compiler.hooks.compilation.tap({ name: "plugin-name" }, compilation => {
  // ...
})

になったことです。

従来の compiler.plugin() の第一引数に指定していた文字列が compiler.hooks のプロパティになっています。 このプロパティは、従来の kebab-case を camelCase にすることで対応できます。

また tap 以外に tapAsync , tapPromiseプラグイン処理を挟み込む事ができます。

v3, v4 両対応するには、分岐するのが一番シンプルなので

if (compiler.hooks) {
  // webpack v4
} else {
  // webpack v3
}

というような処理になるかと思います。

感想

自分のプラグインはさほど大きな対応をする必要は無かったのですが、Chunk graph や ChunkGroups あたりに大きな変更が入っているので、この辺りを触っているプラグインは大変そうな予感がしています。

webpack v4 対応にあたって uglifyjs-webpack-pluginwebpack/webpack リポジトリ内にある プラグイン の変更履歴を参考にしました。

babel と webpack について

フロントエンド開発において無視できない存在となった babel と webpack について説明する機会があり、作成したスライドを折角なので掲載しておこうと思います。

スライド

注意

全体像を手早く捉えられるようにイメージ優先で作成した資料のため、正確性に欠ける部分があります。