webpackのpitch loaderについて@rchaser53
View Slide
webpackのpitch loaderについてですcache-loaderの調査中に気になったの調べました自作、バグ修正の足がかりに役立てば幸いです
loaderとは?いつものアレ(babel-loaderとかcss-loaderとか)moduleのソースコードを変換するもの同期/非同期の両方に対応しているloaderは任意のファイルを出力できる(file-loaderとか)
loaderの処理順{test: '/.js$/',use: [ 'abc-loader', 'def-loader' ]}1. def-loader2. abc-loaderではない正確にはpitch loaderが先に実行される
pitch loaderとはdefault loaderの前に実行されるoptionalなloader値を返すとdefault loaderまで処理が省略されるこの時点ではまだソースは読み込まれていない
default loaderの前に実行されるoptionalなloader// webpack.config.js{test: '/.js$/',use: [ 'abc-loader', 'def-loader' ]}以下が正しい処理順1. abc-loader -- pitch2. def-loader -- pitch3. (read the sources)4. def-loader -- default5. abc-loader -- default
default loaderの前に実行されるoptionalなloaderdomのevent bublingからデザインされたもの
値を返すとdefault loaderまで処理が省略されるmodule.exports = {pitch: function() {// 値 返 default 処理 省略// 返 値 String Bufferreturn 'something'// 非同期// const callback = this.async();// callback(null, 'something');// return 何 返 (undefind) 次 loader 処理 移}default: function(sources) {return sources[0] // Array 来 単純 return}}
値を返すとdefault loaderまで処理が省略される例1abc-loader.pitch return "abc"def-loader.pitch (省略)def-loader.loader (省略)abc-loader.loader (省略)
値を返すとdefault loaderまで処理が省略される例2abc-loader pitch returndef-loader pitch return "somethingA"def-loader default (省略)abc-loader default return "somethingB"
値を返すとdefault loaderまで処理が省略される使用例 cache-loader1. pitch loaderでcacheと依存ファイルのmtimeを比較2.差異がない場合はcacheを読みこみreturn3. defalult loaderでそれまでの生成物と依存ファイルのpath、mtimeからcacheを作成
値を返すとdefault loaderまで処理が省略されるmtime …最終変更時刻 (modify time)最後にファイルを変更した時刻のこと正確にはファイルにwrite(2)、またはtruncate(2)した場合に変更されるもの
この時点ではまだソースは読み込まれていないpathは取得できるので取得はできる(非推奨)loader-utilsやschema-utilsは使用できるのでoptionなどは取得できる第3引数経由で他のloaderに値を渡すことはできる
この時点ではまだソースは読み込まれていない正直cache-loaderくらいしか第3引数を使っているloaderを見かけないcacheの依存情報やfileがコンパイル中に変更されていないか確認するために使用しているそもそもpitch loader自体ほとんど使われてない(script-loader, style-loaderとか)
まとめまとめ使う機会はあるのか?webpackに対してはないかもしれないしかしフェイズを2つに分けて、片方ではcache管理などを行うという設計の仕方は使えそうまぁその時楽しめれば良いよねが作成できた!awesome-prettier-loader
参考リンク公式ページ(かなり充実している)Documentation for pitch vs normal loader isn't very clearUNIX/Linuxの部屋 用語集:タイムスタンプcache-loader
ご静聴ありがとうございました!ご静聴ありがとうございました!