当前位置: 首页 > news >正文

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拦截路由
http://www.jsqmd.com/news/161160/

相关文章:

  • 为什么聘请专业人士换轮胎越来越普遍?—— 经济学与现实场景的双重逻辑
  • 国内用户专属福利:PyTorch-CUDA-v2.7镜像阿里云加速源
  • 【课程设计/毕业设计】基于springboot的大学生一体化服务系统基于SpringBoot+Vue的大学生一体化服务系统【附源码、数据库、万字文档】
  • Java毕设选题推荐:基于springboot的大学生一体化服务系统选课缴费、宿舍报修、勤工助学申请等功能 “一网通办【附源码、mysql、文档、调试+代码讲解+全bao等】
  • PyTorch模型导出ONNX格式:在CUDA-v2.7镜像中操作指南
  • PyTorch-CUDA-v2.7镜像更新日志:新增功能与兼容性改进
  • 骨科企业DMS经销商渠道管理软件方案拆解
  • 为什么公司宁愿高价雇临时管理顾问,也不低薪聘全职管理人员?
  • PyTorch-CUDA-v2.7镜像中实现分布式训练的两种模式
  • 【优化参数】基于matlab粒子群算法PSO的MMC拓扑优化中参数调整策略【含Matlab源码 14804期】
  • c盘空间优化方案汇总
  • PyTorch-CUDA-v2.7镜像商标使用规范:品牌露出限制条款
  • PyTorch-v2.7 + CUDA 12.4:最新组合带来哪些性能飞跃?
  • PyTorch-CUDA-v2.7镜像维护团队介绍:核心成员背景
  • PyTorch-CUDA-v2.7镜像环境变量设置指南
  • 执行命令行程序测试自动化
  • 数据仓库工程师在AI时代的走向探究
  • PyTorch-CUDA-v2.7镜像中使用HuggingFace Transformers库教程
  • StackOverFlowError 和 OutOfMemoryError 的区别
  • 国家重点研发计划推荐环境:PyTorch-CUDA-v2.7合规性说明
  • SQL Server - Session settings in procedure
  • Markdown撰写技术博客:结合PyTorch-CUDA-v2.7镜像输出实验结果
  • PyTorch安装失败终极解决:CUDA驱动不兼容?用v2.7镜像绕过难题
  • 惊人应用!提示工程架构师的数据驱动策略助力AI提示优化可扩展性
  • 基于PyTorch-CUDA-v2.7镜像的NLP任务实战:文本分类全流程
  • YOLOv11模型训练实战:基于PyTorch-CUDA-v2.7镜像的完整流程
  • FLIR 5G相机及采集卡sensemos
  • 如何最好地制定自动化测试策略
  • 进一步探索了解 task_struct 中 mm_struct 如何管理虚拟内存区域(VMA),以及GOT和PLT如何与位置无关代码(PIC)配合工作
  • 如何将本地PyTorch项目迁移到CUDA-v2.7镜像环境中?