Sabigara

next-sitemapがビルドしてくれないと思ったらpnpmが原因だった

GitHub - iamvishnusankar/next-sitemap: Sitemap generator for next.js. Generate sitemap(s) and robots.txt for all static/pre-rendered/dynamic/server-side pages.Sitemap generator for next.js. Generate sitemap(s) and robots.txt for all static/pre-rendered/dynamic/server-side pages. - iamvishnusankar/next-sitemapファビコンgithub.com

個人開発サービスのsitemapを生成しようとして next-sitemap を導入したが、READMEに書いてあるとおりに設定しても動かなかった。

ビルドログを見ていても postbuild が完全に無視されているらしかった。

// next-sitemap.config.js
/** @type {import('next-sitemap').IConfig} */
const config = {
  siteUrl: process.env.SITE_URL || "https://example.com",
  generateRobotsTxt: true, // (optional)
  // ...other options
};

export default config;
// package.json
{
  "build": "next build",
  "postbuild": "next-sitemap"
}

問題点

pnpmpostbuild を実行しない

そもそも postbuild を(非明示的に)実行しているのは誰だろうか、と思ってVercelのドキュメントを検索したがそんな用語は見当たらない。

となるとパッケージマネージャーかなと思って調べるとやっぱり pnpm が問題だった。

Don't run the pre/post scripts · Issue #2891 · pnpm/pnpmNOTE: It is possible to return how pre/post scripts worked by setting the enable-pre-post-scripts setting to true (since v6.1.0) When running pnpm run foo, don't run the prefoo script and the postf...ファビコンgithub.com

単純に next build の後に実行するだけでいい。

{
  "build": "next build && next-sitemap"
}

next-sitemap.config.js をesmで読めない

もう一つ問題があった。

SyntaxError: Unexpected token 'export' · Issue #404 · iamvishnusankar/next-sitemapDescribe the bug The default next-sitemap.config.js configuration gives error on yarn build To Reproduce install next-sitemap yarn add next-sitemap add next-sitemap.config.js /** @type {import('nex...ファビコンgithub.com

issueにも上がっているが、このconfigをesmで読むには package.jsontype: "module" にしないといけないらしい。

ただ何か問題が起こりそうなので、これだけのために設定を変更したくない。むしろconfigの方をCommonJSにしたかったのでそうした。

export default config;
module.exports = config;