手動でexportPathMapを動的に設定する

@goran_nasai
こんにちは。GORAN
です。ついこの前「手動でAPI(JSONファイル)を作ってJamstackにしたい」という謎の仕様希望があったので、その時の対応を残しておきます。
前提
本記事は、Next.jsのプロジェクトを前提としています。
どんなときに使う??
一般的に、Jamstack構成のサイトを設計するときというのは、microCMSのようなHeadless CMSを用意してAPIを設計し、[id].tsx
などでDynamic Routesを利用して静的ページ生成する場合がほとんどだと思います。
が、中には「個別のページファイルはコードである程度やりたいけど、一覧ページとかは自動生成したい」みたいな要望がありまして。
つまりは、いつも[id].tsx
でやってるgetStaticPaths
を手動でやりたいときがあるということです。
実装
方針はシンプルで、getStaticPaths
でreturn
していたpaths
を直接next.config.js
のexportPathMap
に書いてしまおうというものです。
コード
next.config.js
module.exports = {
...
exportPathMap: async function () {
const paths = {
'/': { page: '/' },
...
}
const arr = await require('**.json');
const pathsArr = itemsArr.map(item => item.id);
pathsArr.forEach(path => {
paths[`/${path}`] = { page: path };
});
return paths
}
}
上記のコードは以下のようなjson
を想定しています。
json
[
{
"id": "hogehoge",
...
},
...
]
おわりに
今回はかなりニッチな話をしましたが、実は最近「Web制作とは」というポピュラーな概念について思案しておりまして。そろそろ何か書けそうなので、次はそんなメジャーな話をしたいと思います。
本年もよろしくお願いいたします。