You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 11:20:28