BrowsersyncでSSIを利用する

ググったらmiddlewareで処理する方法しか見つからなかったけど、ドキュメントを見ていたらrewriteRulesというそれっぽいオプションがあった。レシピとしてそれっぽい方法で使うサンプルがあったけど、バージョンが古いし、SSIのシンタックスが違った。自分で以下のように書き直したら意図したとおりに動いた。

const browserSync = require('browser-sync').create()

browserSync.init({
  // 省略
  rewriteRules: [
    {
      match: /<!--#include virtual="(.+?)" -->/g,
      fn(req, res, match, filename) {
        const includeFilePath = path.join('path/to/includes', filename)

        if (fs.existsSync(includeFilePath)) {
          return fs.readFileSync(includeFilePath)
        } else {
          return `<span style="color: red">\`${includeFilePath}\` could not be found</span>`
        }
      }
    }
  ],
  // 省略
})