Vercel部署Next.js时next-sitemap报ERR_MODULE_NOT_FOUND错误
Vercel部署Next.js时next-sitemap报ERR_MODULE_NOT_FOUND错误修复方案
报错原因
高版本next-sitemap(4.x及以上)的ESM模块解析逻辑与Vercel构建环境、CommonJS格式配置存在兼容冲突,直接导致构建时找不到cli执行文件,叠加静态导出场景的执行顺序问题,最终sitemap生成功能失效。
修复步骤
- 固定next-sitemap到无ESM兼容问题的稳定版本
卸载当前存在兼容问题的版本,安装3.x分支最后一个稳定版,执行命令:npm uninstall next-sitemap && npm install next-sitemap@3.1.55 --save-dev
该版本基于CommonJS规范打包,不会出现mjs模块加载失败的问题,同时完整支持静态导出场景下的sitemap、robots.txt自动生成。 - 调整构建脚本执行顺序
现有sitemap.config.js配置无需修改,其中outDir: './out'与next静态导出的默认输出路径完全匹配。
修改package.json中的build脚本,保证next-sitemap在项目构建完成、静态导出执行前运行,避免拿不到路由数据:
若使用Next.js 13.4及以上版本,且已在next.config.js中配置"build": "next build && next-sitemap sitemap.config.js && next export"output: 'export'开启静态导出,可直接省略next export命令,脚本简化为:"build": "next build && next-sitemap sitemap.config.js" - 清除Vercel构建缓存后重新部署
进入Vercel对应项目的部署页面,选择重新部署,勾选清除构建缓存选项后发起部署,禁止复用旧缓存,避免残留的高版本next-sitemap文件再次触发报错。
高版本next-sitemap适配方案(可选)
如果需要使用4.x及以上版本的next-sitemap,需做两处调整:
- 将根目录下的
sitemap.config.js重命名为sitemap.config.mjs,把配置改为ESM导出格式:
export default { siteUrl: 'https://example.com', generateRobotsTxt: true, sitemapSize: 7000, outDir: './out', };
- 同步修改build脚本中的配置文件路径:
"build": "next build && next-sitemap sitemap.config.mjs && next export"
内容的提问来源于stack exchange,提问作者Shun Yamada
相关产品推荐
相关产品推荐

