NextJS+TypeScript开发Sanity CMS博客遇未处理运行时错误:Error: [object ProgressEvent]
解决方案:NextJS 12.3 + TypeScript 4.8 + Sanity 运行时 Error: [object ProgressEvent]
1. 修复Sanity请求的错误捕获逻辑
[object ProgressEvent] 通常是网络请求异常未被正确处理导致的,Sanity客户端的fetch请求失败时会抛出ProgressEvent而非标准Error对象。在数据获取逻辑(如getStaticProps/getServerSideProps或客户端组件请求)中添加针对性错误处理:
import sanityClient from '@sanity/client'; const client = sanityClient({ // 你的Sanity配置 }); export async function getStaticProps() { try { const posts = await client.fetch(`*[_type == "post"]`); return { props: { posts } }; } catch (err) { // 识别ProgressEvent并提取有效错误信息 if (err instanceof ProgressEvent) { console.error('Sanity请求失败:', err.target?.status || '未知网络错误'); throw new Error('加载博客内容失败'); } throw err; } }
2. 切换SWC到Babel编译器
NextJS 12默认使用SWC编译,但在部分TS版本(如4.8)或M1环境下存在异步函数编译兼容问题。修改next.config.js禁用SWC:
/** @type {import('next').NextConfig} */ const nextConfig = { reactStrictMode: true, swcMinify: false, // 关闭SWC压缩 compiler: { removeConsole: process.env.NODE_ENV === 'production', }, }; module.exports = nextConfig;
若需要完整Babel配置,新建.babelrc文件:
{ "presets": ["next/babel"] }
3. 排查M1环境依赖兼容性
M1芯片的架构可能导致部分依赖编译异常,尝试以下操作:
- 用Rosetta 2终端运行项目(右键终端→获取信息→勾选“使用Rosetta打开”)
- 重新安装依赖时指定x86架构:
arch -x86_64 npm install
4. 调整依赖版本
NextJS 12.3与TypeScript 4.8的组合存在部分兼容问题,可尝试:
- 将NextJS升级到12.3.x系列的最新版本
- 暂时将TypeScript降级到4.7.x版本
- 更新
@sanity/client到最新稳定版
关于该问题的社区反馈
已有不少开发者遇到类似问题,核心诱因集中在SWC对异步函数的编译处理缺陷、Sanity请求错误未被正确捕获、M1环境下的依赖编译异常三类场景,上述方案覆盖了多数已知解决路径。
内容的提问来源于stack exchange,提问作者JwillH
相关产品推荐
相关产品推荐

