Pluginで理解するwebpack


@ 2019.11.06 Ginza.js#6 - connpass

About me

Yusuke Iinuma

(@yinm)


  • A Web Frontend Engineer
  • Working at GMO Pepabo, Inc.
  • A staff of Vue.js Japan User Group

おしながき

  • 発表のゴール
  • webpackのプラグインとは
  • まとめ
  • 発表のゴール
  • webpackのプラグインとは
  • まとめ

webpackの処理を理解したい人が

webpackのプラグインシステムを理解できるようになる

話すこと




話さないこと




  • 既存の便利プラグインの紹介
  • 発表のゴール
  • webpackのプラグインとは
  • まとめ

Plugins are the backbone of webpack. webpack itself is built on the same plugin system that you use in your webpack configuration!

Plugins | webpack
  • webpack.config.jsで設定するプラグインと同じプラグインシステムで、
    webpack本体もできている



➡️ プラグインシステムを理解することが、webpack本体の理解につながる!

プラグインのインターフェース(2種類)

apply()メソッドを持つオブジェクトの場合

引数にcompilerを取る関数の場合

webpack.config.jsでの設定

プラグインの処理

  • webpackで定義されたevent hooks発生時に実行したい処理を実装する
  • event hooksの実装に使われているコアライブラリとして、webpack/tapableがある

簡単な実装でTapableを確認する

event hooksを定義する

処理の中で、定義したevent hooksを呼び出す

Hookされたタイミングで実行したい処理を実装する

(webpackのプラグインで実装するのはこの部分)

webpack本体で、Tapableを使っていることを確認する

(画像のコードは、スライド作成時点のwebpack/lib/Compiler.jsからキャプチャ)

event hooksを定義する

処理の中で、定義したevent hooksを呼び出す

webpack本体で、Tapableを使っている箇所



  • Compiler
  • Compilation
  • Resolver
  • Module Factories
  • Parser
  • Template



ref: Everything is a plugin! Mastering webpack from the inside out - Sean Larkin - YouTube

プラグインでHookできる大体の場所がわかったので、

詳細を追っていけばwebpackの処理を理解できるようになりそう

(自分もまだ全然追えてないですが...!)

  • 発表のゴール
  • webpackのプラグインとは
  • まとめ
  • webpackのプラグインシステムは、webpack本体でも使用されている
  • webpackのプラグインは、以下のどちらかのインターフェースを持っている
    • apply()メソッドを持つオブジェクト
    • compilerを引数に取る関数
  • webpackのevent hooksの実装には、Tapableが使われている