next.js的next export静态生成需先执行npm run build生成.next目录,再运行npm run export导出静态文件,且next.config.js必须配置output: 'export',否则无法正确导出。

Next.js 的 next export 静态生成任务不依赖 Node.js 服务进程,但必须在 Node.js 环境下执行构建流程——VSCode 本身不提供 Node 运行时,配置错或缺失会导致 npm run export 报 command not found: next 或 Cannot find module 'next/dist/build'。
Node.js 和 npm 必须已就位且可被 VSCode 终端识别
VSCode 内置终端能否运行 node -v 和 npm -v,是后续一切的前提。不是“装过就行”,而是 PATH 要对:
- macOS/Linux:别用系统自带
/usr/bin/node,它常为旧版或受限;从nodejs.org下载 LTS 安装包,安装时勾选 “Add to PATH” - Windows:安装时务必勾选 “Add to PATH”,否则 VSCode 终端(哪怕重启)仍找不到
npx - 验证方式:在 VSCode 内置终端(
Ctrl+`)中直接运行node -v和npx next --version,两者都应输出有效版本号
package.json 中 export 脚本必须显式调用 next export
next export 不是默认脚本,必须手动添加到 package.json 的 scripts 里,且不能省略 next 命令前缀:
- 正确写法:
"export": "next export"或带参数如"export": "next export -o ./out" - 错误写法:
"export": "export"(会调用 shell 的export内置命令,报错)、"export": "npx next export"(多余,且可能因 npx 缓存导致版本不一致) - 注意:Next.js 13.4+ 默认启用 App Router,
next export要求所有路由必须可静态化(即无getServerSideProps、getStaticProps以外的动态逻辑),否则构建会失败并提示 “You have provided an unsupported data fetcher”
VSCode 终端需在项目根目录下执行 export
next export 依赖 .next/ 目录和 next.config.js,路径错一个字符就会报 Failed to load next.config.js 或 No build in .next directory:
- 确保 VSCode 左下角显示的是项目根目录(含
package.json和next.config.js的文件夹) - 不要在子目录(如
app/或pages/)里打开终端运行npm run export - 首次运行前必须先成功执行
npm run build(生成.next/),否则next export会直接退出并提示 “No build in .next directory” - 如果用了
pnpm,确认pnpm exec next export是否等效;部分 pnpm 版本需加--分隔符:pnpm exec -- next export
next.config.js 中 staticPageGeneration 与 output: 'export' 是硬性前提
App Router 下,next export 不再自动推断,必须显式声明导出模式:
- Next.js 13.4+:在
next.config.js中必须包含output: 'export',否则next export会被忽略,构建产物仍是 server-rendered 的.next/目录 - 若项目含动态路由(如
app/[slug]/page.tsx),需配合generateStaticParams显式声明所有静态参数,否则对应页面不会被导出 - 使用
dynamic = 'force-static'可强制禁用服务端数据获取,但仅适用于完全静态内容;误用会导致fetch调用被剥离,数据为空 - 注意
next export不处理app/api/路由——这些仍需部署到 Node 环境,静态站点里它们不存在
最容易被忽略的点是:你改了 next.config.js 加了 output: 'export',但没重新运行 npm run build,就直接 npm run export —— 此时构建仍按旧配置走,导出目录里啥也没有。静态生成不是“一键导出”,而是“先构建、再导出”的两阶段流程,中间任何一环断掉,out/ 目录都是空的。











