0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Webpackのloaderを作る

Last updated at Posted at 2017-11-21

Webpackのloaderを理解します。

Webpackの途中結果をファイルにキャッシュするcache-loaderの中身を見ながら自分の手で再構成します。

環境

npm init
mkdir src example

としてexapmleの方にwebpack.config.jsを配置してどしどし実行。src配下にはloaderとなるjsを配置します。
webpack.config.jsのresolveLoadersにsrcのディレクトリを記述します。

実行する

単純にwebpackを実行すると、loadersファイルが実行されます。

デバッグする

実行コマンドを

node --inspect-brk node_modules/webpack/bin/webpack.js 

とすればchromeのインスペクタパネルでデバッグできます。

How to write a loaderを読む

詳しくは公式ドキュメントを読むのが一番いいですが、exportsした関数にソースコードがstringとして渡ってくるようです。
https://github.com/webpack/docs/wiki/how-to-write-a-loader

Cache loaderの中身を理解する

Webpackのビルドはメモリ上のキャッシュを持つことで起動後の2回目以降のビルドを差分だけ行うことができます。
起動時にfileに書いておいたキャッシュを用いることで最初のビルドの高速化を図ろうというのがこのプラグインです。

pitching loaderについて

普段webpackのloaderは右から先に呼ばれます。
例えば

module: {
    rules: [
        {
            test: /\.js$/,
            use: [
                'bar', 'foo'
            ]
        }
    ]
}

上記のようなjsonの設定の場合fooから先に呼ばれるのですが、pitch関数はloaderが呼ばれる前に左から右に呼ばれます。
詳細は公式に
https://github.com/webpack/docs/wiki/loaders#pitching-loader

pitch関数内でreturn もしくは非同期の場合はthis.asyncをに第一引数をnullとして実行することでloaderの処理を飛ばすことができます。

Cache loaderの処理のオーバーヘッド

モジュール毎にファイルを生成したりファイルを読み込んだりしています。

Note that there is an overhead for saving the reading and saving the cache file, so only use this loader to cache expensive loaders.

Githubにもこう書いてる通りファイルIO部分のオーバヘッドが大きいのでしょう。。
ということでモジュール毎のキャッシュファイルから、一つのどでかいjsonファイルにキャッシュを詰め込むようにしたが効果がなかったどころかだいぶ遅くなってしまいました。。。
最適化は難しい

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?