2019/11/29

風邪をひいてしまい少し休んでいた。 体調は元通りだが、流石に酒を流し込む気にはなれず今はド素面である。 こういう時にはたまっているIssueを解決していくのが良さそうである。 ということで今日は大人しくOSSコントリビュートしていく。


ということで前にセットアップしたWindows環境でバリバリコミットしていくぞと思ったのだが、思うようにWebpackが動いてくれなくて困っている。 恐らく、/webfonts/hoge.svg のようなファイルに対して、以下の /webfonts\/.*\.(svg)(\?.*$|$)/ がちゃんと引っ掛かってくれないみたいだ。

module: {
  rules: [
    { test: /webfonts\/.*\.(png|svg|jpg)(\?.*$|$)/, ... },
  ],
},

Webpackのソースコードを確かめてみる。

modulerulestest正規表現が含まれているときの処理は以下だと思われる。 これを見る限り普通に正規表現をそのまま適用しているだけである。

https://github.com/webpack/webpack/blob/0d4607c68e04a659fa58499e1332c97d5376368a/lib/rules/RuleSetCompiler.js#L217-L222

       if (condition instanceof RegExp) {
            return {
                matchWhenEmpty: condition.test(""),
                fn: v => condition.test(v)
            };
        }

おそらく、Windowsでのパスの区切り文字は / ではなく \ なので、これが問題なんじゃないかと思われる。 なので上のコードを以下のように変更してみた。

module: {
  rules: [
    { test: /webfonts\\.*\.(png|svg|jpg)(\?.*$|$)/, ... },
  ],
},

動いた。

i 「wdm」: Compiled successfully.

うーん、やはりWindowsで開発するのは色々と辛いな…。

とりあえず修正のPRを出した。

github.com

今日はここまで。

体を休めなければ。