能否完全禁用Next.js SSR?使用NextPages部署至非SSR主机可行吗?
禁用Next.js SSR并部署到非SSR主机的完整方案
不管你用的是Pages Router(也就是你说的NextPages)还是App Router,都可以完全禁用SSR,生成纯静态站点部署到仅支持静态文件的主机上,下面分两种路由模式说明具体操作:
Pages Router 完全禁用SSR
- 配置静态导出
在项目根目录的next.config.js中添加output: 'export'配置,这会让Next.js在构建时生成纯静态HTML/CSS/JS文件,完全剔除SSR相关逻辑:/** @type {import('next').NextConfig} */ const nextConfig = { output: 'export', // 静态导出不支持Next.js内置图片优化,需要开启unoptimized images: { unoptimized: true, }, // 如果有自定义路由,可根据主机需求配置trailingSlash,可选 trailingSlash: true, } module.exports = nextConfig - 避免使用SSR相关API
所有页面不要使用getServerSideProps(这是触发SSR的核心API),如果需要数据获取,改用getStaticProps(静态预渲染);如果不需要数据,直接编写普通React组件即可,默认就是静态生成的。 - 构建并部署
运行npm run build,项目根目录会生成out文件夹,里面就是完整的静态站点文件,直接将这个文件夹的内容上传到静态主机即可。
App Router 完全禁用SSR
App Router同样可以实现纯静态导出,操作和Pages Router类似:
- 配置静态导出
修改next.config.js,添加相同的output: 'export'配置,图片优化的设置也保持一致。 - 确保组件静态渲染
- 页面组件不要使用
async/await进行数据获取(如果必须用,要确保数据是静态可预渲染的,比如结合generateStaticParams处理动态路由); - 不要使用依赖服务器环境的API(比如
headers()、cookies()这类只能在SSR/SSG运行时调用的方法)。
- 页面组件不要使用
- 构建部署
运行npm run build生成out文件夹,直接上传到静态主机即可。
关于Pages Router vs App Router的疑问
你提到的用Pages Router(NextPages)完全禁用SSR是可行的,只要按照上面的配置操作,就能生成完全无SSR的静态站点。App Router也能做到同样的效果,并非只有Pages Router支持。两者的核心都是通过output: 'export'让Next.js跳过SSR构建流程,生成纯静态资源。
部署注意事项
- 静态主机无需支持Node.js,只要能托管静态文件即可(比如GitHub Pages、Netlify静态部署、Cloudflare Pages等);
- 如果使用了Next.js的客户端路由(
Link组件),需要配置主机的SPA fallback规则:把所有404请求指向index.html。比如在Netlify中可以创建_redirects文件,内容为/* /index.html 200;在GitHub Pages中可以通过自定义404.html配合JS来处理路由 fallback。
内容的提问来源于stack exchange,提问作者is1ldur
相关产品推荐
相关产品推荐

