Next.js部署Cloudflare遇Node.js兼容错误?排查与修复指南
如果你的 Next.js 项目在部署到 Cloudflare Pages/Workers 时突然抛出一句Node.js Compatibility Error先别急着怀疑某个依赖写坏了。这个兼容性错误我前前后后遇到过好几次表面上看是“版本不匹配”实际上绝大多数时候是 Cloudflare 的运行时和你本地 Node 环境之间的“兼容层版本”错位了。这篇文章会从报错现场开始完整拆解这个错误的产生逻辑、排查链路和修复方案。它适合所有把 Next.js 应用往 Cloudflare 上迁的开发者尤其是第一次从 Vercel 或自建服务器切换过来的人——你对本地 Node 版本越自信越容易在这里栽跟头。这一章先说清楚报错到底长什么样、发生在哪一步因为同样叫“Node.js Compatibility Error”出现的位置不同修复方向完全是两回事。1.1 两种报错形态处理思路完全相反我见过的兼容性错误大致可以分为两类。第一类是构建阶段报错也就是npm install或next build还没跑完就挂了日志里会直接告诉你使用的 Node 版本不被构建环境支持。比如error: The project is configured to use Node.js v24.0.0, but the Cloudflare Pages build image only supports Node.js 18.x/20.x/22.x.第二类是运行时阶段报错这更容易迷惑人。构建阶段全部通过静态资源也部署上去了但一旦访问某个 API 路由、调用某个 Serverless Function或者触发 scheduled worker就会冒出一个“Node.js Compatibility Error”。这类报错对应的是 Cloudflare Workers 运行时的问题和构建环境已经没有关系了。两类错误的差异可以用表格一眼看清报错阶段典型表现核心变量构建阶段npm 安装失败、next build 中段NODE_VERSION、package.json的engines字段运行时阶段页面能开接口 500日志出现兼容性错误compatibility_date、compatibility_flags、适配器版本很多人卡住的原因就是把这两类混在一起处理构建报错就去配环境变量运行时报错却去调构建版本最后两头都没解决。1.2 构建成功但运行时失败是重灾区为什么运行时报错是重灾区因为 Cloudflare 的模型里“构建”和“运行”是两个完全隔离的环境。构建阶段跑在 Cloudflare 的构建容器里这个容器是模拟常见 Node 项目构建出来的你通过NODE_VERSION环境变量选一个版本它就用这个版本的 Node 去执行npm install、next build这类命令。构建容器本质上还是一台普通的服务器所以你在package.json里要求 Node 24只要容器真的提供了 Node 24构建就能过。但构建产物真正跑起来时是上传到 Workers 调度平台上执行的。Workers 不是一个 Node.js 进程它是一个基于 V8 引擎的 Web 标准运行时。你的 Next.js 函数会被适配器转换成 Worker 代码在 Worker 里执行。这时候项目要求的 Node 24 并不会被“安装”进去而是靠一个模拟层去模拟 Node 的 API。如果模拟层不够新或者你的代码碰了模拟层没覆盖的 API就会报 Node.js Compatibility Error。“本地能跑、构建能过、线上崩”就是这个模型下最典型的症状。1.3 动手前先收集三份关键信息排查这个错误的第一步不是改配置而是把信息收集齐。最少需要三样完整构建日志尤其是报错前后 50 行。只看摘要把很多上下文弄丢了。package.json里的engines字段和依赖版本确认 Next.js、适配器、Node 版本要求分别是什么。项目里的wrangler.toml或 Pages 项目的构建配置看compatibility_date和compatibility_flags是否显式设置过。这三样东西拼起来才能定位问题到底出在“版本声明”还是“运行时兼容层”还是“适配器版本”。直接搜报错信息里的关键词往往只能搜到零散答案不如先把自己的版本矩阵列清楚。2. 根因拆解Cloudflare 的“Node.js 版本”和你想的不一样理解了报错现场接下来得搞清楚 Cloudflare 到底是怎么判断“兼容不兼容”的。这里有一个认知误区几乎每个人都会踩我本机是 Node 22项目反正也跑得很顺所以部署到 Cloudflare 也应该是 Node 22。真实情况根本不是这样。2.1 Workers 运行时不是 Node.js 本体Cloudflare Workers 跑的是 V8 引擎搭配的是 Web 标准 API比如fetch、Request、Response、crypto.subtle、WebSocket这些。它并不是一个“精简版 Node.js”而是从一开始就没有 Node 运行时。你要在 Worker 里用node:fs、node:path、process这些内置模块得靠一个叫nodejs_compat的兼容层。这个兼容层不是把整套 Node 二进制搬进去而是用 JavaScript 去模拟 Node 的模块系统和常用 API。用生活化的比喻来说它像是给你一把“仿制工具箱”常用的扳手、螺丝刀都有但不保证每个型号都齐全而且版本越旧缺的零件越多。所以 Cloudflare 面板里的“Node.js Compatibility”并不是你选“Node 22”就能得到完整 Node 22它只是控制兼容层开放哪些 API 给 Worker 使用。2.2 compatibility_date 才是真正的开关真正控制兼容层能力的是compatibility_date兼容日期。这个日期是一个“时间戳”表示你的 Worker 运行在哪个 API 版本集合上。日期越新可用的 API 就越新但行为变更也越多。配合compatibility_flags里的nodejs_compat才能启用 Node 兼容模式。你的wrangler.toml里如果没有显式写这两个字段Cloudflare 会使用某个默认日期。问题就在这默认日期可能已经比较老了而你的 Next.js 项目或者某个依赖库用了新版本 Node API于是运行时就告诉你“不兼容”。举个例子你可能会在日志里看到类似这样的提示Node.js Compatibility Error: The Node.js compatibility flag is enabled, but the compatibility_date is too old to provide the requested API. Set a more recent compatibility_date to use this module.这种报错说明不是版本选错了而是“兼容层版本”没跟上。把compatibility_date往后更新配合nodejs_compat标志往往一句配置就解决了。2.3 Next.js 还要过适配层这一关在普通 Node 服务器上跑 Next.js你直接next start就行。但在 Cloudflare 上跑 Next.js必须先把 Next.js 的处理逻辑翻译成 Worker 能执行的形态。这一步由cloudflare/next-on-pages或者 OpenNext 这类适配器完成。适配器本身对 Node 版本有要求而且不同版本支持能力不一样。很多时候你升级了 Next.js但适配器没跟着升它会用旧逻辑去打包新框架结果新框架用到的某个 API 在旧适配器里不受支持最后表现成 Node.js Compatibility Error。所以我一直建议把“Next.js 版本、适配器版本、Cloudflare nodejs_compat 配置”看成一个整体不要拆开单独升级。任何一环掉队这个兼容性错误就会跳出来。3. 排查链路从表面报错一步步定位版本缺口下面这段是我实际排查时走的完整链路。不夸张地说90% 的 Node.js Compatibility Error 都能靠这个思路定位。3.1 先看错误落在哪一层拿到报错信息先做一步分类。报错里明确提到了module node:xxx not found、__require is not defined、process is not defined、Buffer is not defined这属于运行时模拟层缺失 API。报错里出现compatibility_date is too old这是兼容日期不够新。报错里出现Your project requires Node.js vXX这说明某个依赖在安装阶段就声明了 Node 版本要求属于版本声明冲突。这一步的目的是决定你去改wrangler.toml、改NODE_VERSION还是改依赖代码。三条路线走进任意一条死胡同之前都能及时掉头。3.2 本地构造与 Cloudflare 等价的验证环境只靠线上日志排查特别慢因为每次部署都有缓存和排队。正确做法是先用本地环境复现。如果你用的是cloudflare/next-on-pages先跑一次完整构建npx cloudflare/next-on-pageslatest这个命令会在本地生成.vercel/output/static这样的输出目录并且会在构建过程中检查你的项目是否开启了 Node 兼容模式。如果没开启它一般会直接警告或报错。然后用wrangler起一个本地 Preview 环境npx wrangler pages dev .vercel/output/static注意在wrangler.toml里先加上nodejs_compat标志否则本地模拟的也是没有 Node API 的环境问题一样复现不出来。本地能复现至少说明不是线上随机抖动而是项目本身有兼容性缺口。3.3 用版本二分法缩小范围如果报错信息很模糊我习惯用“版本二分法”。具体就是把你的环境变量NODE_VERSION从最高版本依次往下降同时把compatibility_date从旧往新调每改一次组合就重新构建并预览看错误是否消失。实际操作可以对照这个表来试操作解决的问题代价调低NODE_VERSION构建容器版本过新或被依赖拒绝某些语法特性不能用调新compatibility_date运行时 API 集合过旧可能引入不兼容的行为变更开启nodejs_compat完全没有启用 Node 模拟层增加少量运行时开销升级适配器适配器打包逻辑过旧需要重新验证整个项目一般来说先保证nodejs_compat是开启的再把compatibility_date设置为一年以内的日期接着调NODE_VERSION。这个顺序最稳。3.4 一个典型的排查流程示例我某次处理一个模拟项目时报错出现在访问/api/auth路由的时候。线上日志只给了“Node.js Compatibility Error”一行没有任何 API 名。第一步本地用wrangler pages dev起服务访问同一个路由果然复现。第二步把wrangler.toml里compatibility_date从旧日期更新到半年前的日期compatibility_flags加上nodejs_compat再访问错误变了从“兼容日期太老”变成了“缺少某个 Node API”。第三步看代码发现这个路由的依赖在顶层用了node:fs。把这段逻辑改成懒加载只在需要时引入问题最终解决。整个过程不复杂但如果没有本地复现只靠线上日志大概率要在“升级 Next.js”和“换适配器”之间反复横跳。4. 解决方案用最小改动让 Next.js 在 Cloudflare 上稳定运行定位到具体原因之后修复方案其实很直接。这里我按“优先级从低到高”给出四个方案能改配置解决的尽量别动代码能改代码解决的尽量别升级框架。4.1 统一构建期 Node 版本最常见的情况是本地 Node 版本和 Cloudflare 构建环境版本不一致。你需要在 Cloudflare Pages 项目的 Settings → Environment variables 里设置NODE_VERSION让它和项目要求的版本对齐。比如项目package.json里写着{ engines: { node: 20.9.0 } }那就设置NODE_VERSION20。注意NODE_VERSION只需要主版本号不需要20.9.0这种完整版本构建镜像会自动选择匹配的最新 minor 版本。同时建议在项目里加一个.nvmrc文件内容就一行20这一步不是给 Cloudflare 看的是给团队成员和 CI 看的。本地、CI、云端构建环境都用同一个 Node 主版本能避免一大部分“我本地没问题”的兼容性争议。4.2 在 wrangler.toml 中显式打开 Node.js 兼容模式并更新日期如果你的项目用到了 Workers 运行时里的 Node API必须在wrangler.toml里显式声明。一个相对稳妥的配置是这样的name my-next-app compatibility_date 2024-11-01 compatibility_flags [nodejs_compat] pages_build_output_dir .vercel/output/static这里有几个细节要注意nodejs_compat必须写在compatibility_flags数组里靠compatibility_date默认开启是行不通的。compatibility_date不要设成2024-01-01这种太老的日期否则即使有nodejs_compat许多新 Node API 依然没有。如果你用的是 OpenNext 方案pages_build_output_dir要根据实际输出目录调整不一定是上面这个路径。配置改完重新构建一次看运行时错误是否消失。这一步能解决大多数情况因为我见过很多项目压根没配置过wrangler.toml完全依赖默认值默认值通常不会替你打开 Node 兼容模式。4.3 升级适配器而不是盲目升级 Next.js有些项目配置已经正确但还是报错这时候要看适配器版本。如果你用的是cloudflare/next-on-pages先跑一遍升级npm install cloudflare/next-on-pageslatest如果项目已经迁移到 OpenNext也要确认opennextjs/cloudflare之类包的版本和 Next.js 版本是否匹配。适配器版本的坑在于它更新得比 Next.js 慢有时候你在本地用 Next.js 15 开发得很开心但适配器还没有完全支持打包出来的 Worker 自然缺东西。规避方法也很简单升级 Next.js 之前先看对应的适配器发布说明确认它支持你打算升级的目标版本。宁可晚一点升级也不要让生产环境卡在兼容性错误上。4.4 能不用 Node 专属 API 就别用最后一个方案是动代码但往往是最稳固的。Next.js 因为可以在 Edge Runtime 和 Node.js Runtime 之间切换所以很多问题其实来自你写了“只属于 Node 环境”的代码。Cloudflare 的 Workers 被设计成接近 Web 标准你写代码时应该优先用 Web API。比如原本这样写import { createHash } from node:crypto; export function md5(input) { return createHash(md5).update(input).digest(hex); }在 Worker 环境里更容易遇到兼容问题的做法是换成 Web Crypto APIexport async function sha256Hex(input) { const data new TextEncoder().encode(input); const digest await crypto.subtle.digest(SHA-256, data); const hex [...new Uint8Array(digest)] .map((b) b.toString(16).padStart(2, 0)) .join(); return hex; }这只是一种思路。重点是每次引入node:xxx模块之前先问一句“这个能力 Web API 是不是已经有了”如果你能绕开 Node 专属 API就不用依赖 Cloudflare 的模拟层自然少一层兼容性风险。5. 验证与防复发只有跑通了测试才算修好改完配置不等于修好了。我在这个错误上吃过亏修改wrangler.toml后以为解决了结果漏掉了一个页面线上还是崩。所以修复后必须按下面这套流程完整验证顺便把防复发机制一起做掉。5.1 用本地模拟排除“本地能用线上报错”的玄学本地模拟是验证的第一道关。确保本地已经用wrangler pages dev跑起预览环境后把项目的核心路由、API 路由、以及任何被 Scheduled Trigger 触发的逻辑都访问一遍。我一般会写一个简单的冒烟脚本循环请求关键接口检查返回的 HTTP 状态码和关键字段。不要只测首页因为静态页面在 Cloudflare 上由边缘缓存处理根本不经过 Worker你构建期没问题就不会报 Node.js Compatibility Error。真正需要测的是pages/api下的动态接口以及所有跑在 Worker 里的逻辑。5.2 发布到隔离环境做最终确认本地模拟通过后我建议不要直接推到生产环境而是先发布到一个临时分支或者 Preview 环境。Cloudflare Pages 天然支持每个 Git 分支生成独立预览环境你可以把修复分支推上去用预览环境再跑一遍同样的冒烟脚本。这一步能验证线上构建镜像、线上配置、线上运行时之间的组合是否正确和本地模拟互相补充。预览环境如果还有问题直接看 Preview 的部署日志。日志里会完整打印 wrangler 配置被解析后的状态你一眼就能确认nodejs_compat有没有真正生效。5.3 把版本约束写进仓库避免下次再踩问题修复后趁热打铁把约束固化下来。否则过三个月你换台电脑、重装一次依赖大概率又踩同一个坑。建议在仓库里做三件事根目录加.nvmrc写上项目要求的 Node 主版本。package.json的engines字段补上相同约束并通过engine-stricttrue让版本不匹配时报错而不是警告。在wrangler.toml里把compatibility_date和compatibility_flags写清楚让后来接手的人一眼看到该项目依赖 Node 兼容模式。我还会把下面这条命令写进 README方便任何人快速检查本地环境node -v npx wrangler --version npx next --version三个版本号对齐项目基本就能在一个可控的版本矩阵里稳定运行。最后分享一个我个人的习惯遇到 Node.js Compatibility Error先改compatibility_date和nodejs_compat再考虑升级依赖。大多数时候这个错误不是你的代码有问题而是运行平台和本地环境之间的“版本翻译”出了偏差。把 Cloudflare 的运行模型理解透这类问题就不会再让你加班了。

相关新闻

子集树与回溯法:从枚举到剪枝的搜索思维进阶

子集树与回溯法:从枚举到剪枝的搜索思维进阶

很多人第一次接触"生成集合的所有子集"这个问题&#xff0c;脑子里冒出来的往往是位运算&#xff1a;for mask in range(1 << n)&#xff0c;一个循环把所有情况列出来&#xff0c;简洁又暴力。但如果你只停留在这一层&#xff0c;后面遇到"子集和为K&quo…

2026/10/14 6:42:30 阅读更多 →
CATIA许可证管理端不弹窗?从进程、服务与显示设置排查修复

CATIA许可证管理端不弹窗?从进程、服务与显示设置排查修复

简介&#xff1a;CATIA在WIN10系统下运行时常遇到DS License Server Administration无法弹出许可证管理窗口的故障&#xff0c;影响正常建模与授权使用。它针对这一问题提供系统化的排查与解决思路&#xff0c;面向CATIA使用者、安装运维人员及需要重新配置授权的工程师。资源为…

2026/10/14 6:42:30 阅读更多 →
计算机视觉期末复习:从卷积到SIFT的习题攻克指南

计算机视觉期末复习:从卷积到SIFT的习题攻克指南

简介&#xff1a;这是一份面向计算机视觉课程期末复习的习题整理资料&#xff0c;基于章毓晋《计算机视觉教程》&#xff08;微课版第3版&#xff09;章节内容编排&#xff0c;覆盖距离计算、图像采集设备、相机成像、梯度与拉普拉斯算子、哈夫变换、形状分析、双目立体视觉、运…

2026/10/14 6:42:30 阅读更多 →

最新新闻

AI编程教程为何爆火2万Star:从零基础到生产落地的完整路径

AI编程教程为何爆火2万Star:从零基础到生产落地的完整路径

1. 这个“2万Star”到底意味着什么&#xff1a;从GitHub数字看AI编程教程的真实分量很多人看到标题里“2万Star”第一反应是&#xff1a;哇&#xff0c;火了。但作为在开发者教育领域摸爬滚打十多年的老手&#xff0c;我得先泼一盆冷静的水——Star数从来不是教学内容质量的直接…

2026/10/14 7:19:37 阅读更多 →
DNN多分类任务核心设计:Softmax、交叉熵与PyTorch实战

DNN多分类任务核心设计:Softmax、交叉熵与PyTorch实战

2. 多分类任务的三个核心设计问题先说结论&#xff1a;DNN跑多分类&#xff0c;真正需要想清楚的只有三件事——输出层的神经元数量、输出层的激活函数、损失函数的选择。这三件事定下来&#xff0c;模型框架基本就定死了&#xff0c;后面做的都是调参和优化。2.1 输出层神经元…

2026/10/14 7:19:37 阅读更多 →
离线环境部署MySQL 5.7:tar.gz包安装与避坑指南

离线环境部署MySQL 5.7:tar.gz包安装与避坑指南

简介&#xff1a;本资源为 MySQL 5.7.40 在 Linux-glibc2.12 环境下的 x86_64 离线安装包&#xff0c;面向需要在无外网或内网环境中部署关系型数据库的运维与后端开发人员。压缩包共 379 个文件&#xff0c;约 646.59MB&#xff0c;以 h 头文件、so 动态库、xml 配置、sql 脚本…

2026/10/14 7:19:37 阅读更多 →
华为HCIP-AI测试卷高效复习指南:从背答案到动手验证

华为HCIP-AI测试卷高效复习指南:从背答案到动手验证

简介&#xff1a;这份华为认证HCIP-AI测试卷与答案文档&#xff0c;面向备考华为人工智能高级认证的考生及希望系统检验AI基础知识的开发者&#xff0c;帮助梳理图像处理、语音合成、HiAI生态与快应用开发等核心考点。资源包共1个docx文件&#xff0c;约14KB&#xff0c;内容以…

2026/10/14 7:19:37 阅读更多 →
基于rSVD与软阈值的Matlab高效信号去噪方法

基于rSVD与软阈值的Matlab高效信号去噪方法

1. 项目背景与核心挑战谐波噪声是信号处理领域常见的干扰类型&#xff0c;广泛存在于电力系统监测、机械振动分析、生物医学信号采集等场景。传统去噪方法如傅里叶滤波、小波变换在面对高维大数据集时往往面临计算效率低下、噪声鲁棒性不足的问题。这个Matlab项目提出了一种融合…

2026/10/14 7:19:37 阅读更多 →
智慧农业最后一百米:破解乡村数字化落地的设备与运维难题

智慧农业最后一百米:破解乡村数字化落地的设备与运维难题

做了快八年农业数字化项目&#xff0c;我最深的一个体会是&#xff1a;智慧农业真正难的从来不是算法有多高级、传感器有多精密&#xff0c;而是怎么让技术在没有网线、没有专职IT人员、甚至不少农户只用老年机的村子里&#xff0c;持续稳定地转起来。前段时间复盘了一个扎根基…

2026/10/14 7:18:36 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起&#xff1a;它到底想解决什么问题第一次看到"AnyPS5"这个标题&#xff0c;我脑子里冒出来的第一个念头是&#xff1a;这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述&#xff1a;Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师&#xff0c;我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性&#xff0c;实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景&#xff0c;也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间&#xff0c;确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中&#xff0c;这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介&#xff1a;基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码&#xff0c;面向计算机相关专业课程设计与期末大作业学生&#xff0c;以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程&#xff0c;…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程&#xff1a;键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化&#xff0c;十个新手有八个栽在"往输入框里填东西"这件事上&#xff1a;要么填不进去&#xff0c;要么填了一半&#xff0c;要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程&#xff1a;阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀&#xff1a;什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面&#xff0c;跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →