news 2026/6/12 8:54:22

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/6/10 6:21:21

医疗影像分析系统构建:基于PyTorch-CUDA-v2.7的诊断平台

医疗影像分析系统构建&#xff1a;基于PyTorch-CUDA-v2.7的诊断平台 在现代医学影像中心&#xff0c;放射科医生每天面对成百上千张CT、MRI图像&#xff0c;手动筛查病灶不仅耗时费力&#xff0c;还容易因疲劳或经验差异导致漏诊。而与此同时&#xff0c;深度学习技术早已在Ima…

作者头像 李华
网站建设 2026/6/10 16:00:49

执行命令行程序测试自动化

这几天有一个小工具需要做测试&#xff0c;是一个命令行工具&#xff0c;这个命令行工具有点类似mdbg等命令行工具&#xff0c;即程序运行后&#xff0c;在命令行等待用户敲入的命令&#xff0c;处理命令并显示结果&#xff0c;再继续等待用户敲入新的命令。 原来的测试用例都…

作者头像 李华
网站建设 2026/6/10 15:55:14

Markdown编辑器使用建议

前言 什么是Markdown&#xff1f;Markdown 是一种轻量级的标记语言&#xff08;Markup Language&#xff09;&#xff0c;比结构化的HTML更加轻量化我认为是&#xff0c;在做笔记&#xff0c;写博客的时候&#xff0c;用.text文件太简单&#xff0c;用.word太冗余&#xff0c;有…

作者头像 李华
网站建设 2026/6/9 21:37:37

docker安装polardb postgresql

按照官方存储库 https://github.com/ApsaraDB/PolarDB-for-PostgreSQL 的说明 docker pull docker.1ms.run/polardb/polardb_pg_local_instance:15 Trying to pull docker.1ms.run/polardb/polardb_pg_local_instance:15... Getting image source signatures Copying blob af6e…

作者头像 李华
网站建设 2026/6/10 15:24:38

社区版与企业版区别:功能、支持与SLA对比表

社区版与企业版深度对比&#xff1a;PyTorch-CUDA 镜像的选型之道 在AI研发日益工程化的今天&#xff0c;一个看似简单的技术决策——该用社区版还是企业版的 PyTorch-CUDA 容器镜像——往往直接影响项目的推进效率和系统稳定性。我们常看到这样的场景&#xff1a;研究团队用社…

作者头像 李华
网站建设 2026/6/10 20:02:07

【剪映小助手源码精讲】第35章:异常体系设计

第35章&#xff1a;异常体系设计 35.1 概述 异常体系是剪映小助手的错误处理基础框架&#xff0c;通过统一的错误码和异常类设计&#xff0c;为系统提供标准化的错误处理机制。该体系采用Python枚举类定义错误码&#xff0c;支持中英文错误消息转换&#xff0c;覆盖从基础错误到…

作者头像 李华