news 2026/6/3 21:58:38

Next.js第十八章(静态导出SSG)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Next.js第十八章(静态导出SSG)

静态导出SSG

Next.js 支持静态站点生成(SSG,Static Site Generation),可以在构建时预先生成所有页面的静态 HTML 文件。这种方式特别适合内容相对固定的站点,如官网博客文档等,能够提供最佳的性能和 SEO 表现。

配置静态导出

需要在next.config.js文件中配置outputexport,表示导出静态站点。distDir表示导出目录,默认为out

importtype{NextConfig}from"next";constnextConfig:NextConfig={/* config options here */output:"export",// 导出静态站点distDir:"dist",// 导出目录};exportdefaultnextConfig;

接着我们执行npm run build命令,构建静态站点。

构建完成之后,我们安装http-server来启动静态站点。

npminstallhttp-server -g#安装http-servercddist#进入导出目录http-server -p3000#启动静态站点

启动完成之后发现点击a标签无法进行跳转,是因为打完包之后的页面叫about.html,而我们的跳转链接是/about,所以需要修改配置项。

修改配置项

需要在next.config.js文件中配置trailingSlashtrue,表示添加尾部斜杠,生成/about/index.html而不是/about.html

importtype{NextConfig}from"next";constnextConfig:NextConfig={/* config options here */output:"export",// 导出静态站点distDir:"dist",// 导出目录trailingSlash:true,// 添加尾部斜杠,生成 /about/index.html 而不是 /about.html};exportdefaultnextConfig;

此时重新点击a标签就可以进行跳转了。

动态路由处理

新建目录:src/app/posts/[id]/page.tsx

如果要使用动态路由,则需要使用generateStaticParams函数来生成有多少个动态路由,这个函数需要返回一个数组,数组中包含所有动态路由的参数,例如{ id: '1' }表示对应id为1的详情页。

exportasyncfunctiongenerateStaticParams(){//支持调用接口请求详情id列表 const res = await fetch('https://api.example.com/posts')return[{id:'1'},//返回对应的详情id{id:'2'},]}exportdefaultasyncfunctionPost({params}:{params:Promise<{id:string}>}){const{id}=awaitparamsreturn(<div><h1>Post{id}</h1></div>)}

图片优化

如果使用Image组件优化图片,在开发模式会进行报错

⚠️ 警告

get-img-props.ts 442 Uncaught Error: Image Optimization using the default loader is not compatible with{ output: 'export' }.

可能的解决方案:

  • 移除{ output: 'export' }并运行 "next start" 以启用包含图片优化 API 的服务器模式。
  • next.config.js中配置{ images: { unoptimized: true } }来禁用图片优化 API。
  • 使用自定义loader实现

了解更多:https://nextjs.org/docs/messages/export-image-api

importImagefrom"next/image"importtestfrom'@/public/1.png'exportdefaultfunctionAbout(){return(<div><h1>About</h1><Image loading="eager"src={test}alt="logo"width={250*3}height={131*3}/></div>)}

我们使用自定义loader来实现图片优化,要求我们通过一个图床托管图片。路过图床 是一个免费的图床,我们可以使用它来托管图片。


importtype{NextConfig}from"next";constnextConfig:NextConfig={/* config options here */output:"export",// 导出静态站点distDir:"dist",// 导出目录trailingSlash:true,// 添加尾部斜杠,生成 /about/index.html 而不是 /about.htmlimages:{loader:'custom',// 自定义loaderloaderFile:'./image-loader.ts',// 自定义loader文件},};exportdefaultnextConfig;

根目录:/image-loader.ts

exportdefaultfunctionimageLoader({src,width,quality}:{src:string,width:number,quality:number}){return`https://s41.ax1x.com${src}`}

src/app/about/page.tsx

importImagefrom"next/image"exportdefaultfunctionAbout(){return(<div><h1>About</h1><Image loading="eager"src='/2025/12/29/pZYbW7t.jpg'alt="logo"width={250*3}height={131*3}/></div>)}

注意事项

以下功能在SSG中不支持,请勿使用:

  • Dynamic Routes with dynamicParams: true
  • 动态路由没有使用generateStaticParams()
  • 路由处理器依赖于Request
  • Cookies
  • Rewrites重写
  • Redirects重定向
  • Headers头
  • Proxy代理
  • Incremental Static Regeneration增量静态再生
  • Image Optimization with the default loader默认加载器的图像优化
  • Draft Mode草稿模式
  • Server Actions服务器操作
  • Intercepting Routes拦截路由
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/29 15:06:56

如何最好地制定自动化测试策略

尽管不能否认手动测试的价值&#xff0c;自动化测试的需求却在不断增长。自动化测试可以为公司和团队带来许多好处&#xff1a;时间效率高、覆盖面广。如何最好地制定自动化测试策略呢&#xff1f;在本文中&#xff0c;我将展示测试自动化策略的所有7个阶段中的一些最佳实践&am…

作者头像 李华
网站建设 2026/5/27 19:23:14

PyTorch-CUDA-v2.7镜像中使用HuggingFace Transformers库教程

PyTorch-CUDA-v2.7 镜像中高效使用 HuggingFace Transformers 实践指南 在当前 AI 开发节奏越来越快的背景下&#xff0c;一个常见的痛点是&#xff1a;明明只想快速验证一个 NLP 模型的效果&#xff0c;却不得不花上半天时间折腾环境——CUDA 版本不对、PyTorch 编译失败、cuD…

作者头像 李华
网站建设 2026/5/31 8:47:15

OneAPI与PyTorch整合前景:跨架构计算的终极目标

OneAPI与PyTorch整合前景&#xff1a;跨架构计算的终极目标 在深度学习飞速发展的今天&#xff0c;AI模型的规模和复杂性不断攀升&#xff0c;对算力的需求早已突破单一硬件平台的能力边界。从实验室中的原型训练到工业级的大规模推理部署&#xff0c;GPU加速已成为标配。NVIDI…

作者头像 李华
网站建设 2026/5/31 15:20:04

PyTorch-CUDA-v2.7镜像环境变量设置指南

PyTorch-CUDA-v2.7镜像环境变量设置指南 在现代深度学习项目中&#xff0c;最让人头疼的往往不是模型设计本身&#xff0c;而是“为什么我的代码在别人机器上跑不起来”。你有没有遇到过这样的场景&#xff1a;明明本地训练一切正常&#xff0c;一换到服务器就报 CUDA out of m…

作者头像 李华
网站建设 2026/5/28 18:00:47

数据仓库工程师在AI时代的走向探究

关于数据仓库工程师未来10年的走向&#xff0c;核心结论是&#xff1a;岗位不会消失&#xff0c;但会发生根本性转型。 其价值将从“数据的搬运工与仓库建造者”转向“数据价值的架构师与赋能者”。以下是具体的分析与预测&#xff1a;未来趋势分析&#xff1a;挑战与机遇并存数…

作者头像 李华