highlight.jsを使うことにしました

highlight.jsを使うことにしました


mako-toshighlight.jsを使うことにしましたhighlight.jsを使うことにしましたhttps://images.microcms-assets.io/protected/ap-northeast-1:427472ee-9b6a-4adc-9b53-aaf8367f5515/service/study-for-gatsby/media/mika-baumeister-J5yoGZLdpSI-unsplash.jpg

highlight.js を使うことにしました

microCMS では html 内の code ブロックに class 名等を追加することが出来ないため、言語を指定できないので prism.js は無理でした。
そのため highlight.js を使うことにしました。
しかしテンプレートの jsx で import すると highlight.js は適用済みなのにクライアントの bundle に含まれることが分かりました。

それに対応するために html 周りを扱うプラグインを作成しました。

そのプラグインでは highlight.js 以外の事もしたかったので名前を gatsby-transformer-cheerio としました。(現在はgatsby-transformer-for-microcmsと名前を変えてnpmモジュールにしました)

cheerio で 2 つの処理を実行して結果を graphQL を詰め込む形にしました。

  • html からテキストを抜き出す処理
  • pre>code となっている code タグを見つけたら highlight.js の highlightAuto メソッドを呼び出す処理


gatsby-config.js に書くオプションは以下のようになります。

module.exports = {
  plugins: [
    {
      resolve: 'gatsby-transformer-cheerio',
      options: {
        mediaType: 'MicrocmsBlog'// string
        field: 'body'// string
      },
    },
  ],
};

またリポジトリを作成してしまいました。

Photo by Mika Baumeister on Unsplash

©