hexoのpwa化pluginが動かなかくなった話
はじめに
まず初めに、このサイトはhexoというprojectを用いて作成されているのですが、そのhexoにはhexo-pwa という物があり、これを使うことで簡単にpwaに対応することができます、ですが大本が既に更新されていない状態になっており2020/12月頃には既に動作しなかった覚えがありますが、 私はそのforkであるhexo-pwa を使わせていただいていました。ですが少し前にhexo v5.4.0 がリリースされました。これには依存関係の更新としてjs-yamlという物が含まれていました。そしてjs-yamlの更新でsafeloadがデフォルトで使用されるようになった というのが今回の問題点です。そちらを理解しつつご覧ください。
直し方
はじめにでも言った通り、今回の不具合というかはjs-yamlにはsafeloadという機能があり、hexo-pwaではそれを使用していました。READMEのconfigの書き方を引用してみましょう。
routes:
- pattern: !!js/regexp /hm.baidu.com/
strategy: networkOnly
- pattern: !!js/regexp /.*\.(js|css|jpg|jpeg|png|gif)$/
strategy: cacheFirst
- pattern: !!js/regexp /\//
strategy: networkFirst
このように書かれているわけですが、引用したymlにもある!!js/regexpという部分がsafeloadを使うという明言です、そして最初にも言った通り、safeloadはjs-yamlの更新で デフォルトで使用するようになったわけですつまり、これは既にjs-yamlでは存在しないtagになったわけです、そしてエラーでは存在しないtagだという事を示唆しています。 なので!!js/regexpを削除し、以下のようにすると正常に動作します。
routes:
- pattern: /hm.baidu.com/
strategy: networkOnly
- pattern: /.*\.(js|css|jpg|jpeg|png|gif)$/
strategy: cacheFirst
- pattern: /\//
strategy: networkFirst
これらの点を変更し、依存関係を更新したforkを作成したので是非使ってみてください。 hexo-pwa
最後に
hexoはとても軽量で、便利な物ですが、plugin等の多くは更新されていない事が多いです。他にもwordpressの用に多機能なpluginは少なく、 自分で作成するなどしないと使えない機能等があります。なので好き嫌いが分かれそうですが、好きという方で助かったという方がいれば幸いです。