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

SvelteKit报Node streams are no longer supported如何解决

SvelteKit 生产环境流相关报错解决方案

问题说明

SvelteKit 从#5117版本更新开始,将内置的node-fetch依赖替换为undici,更新后不少开发者运行项目时会遇到以下报错:

Node streams are no longer supported — use a ReadableStream instead

这个问题复现难度较高,通常仅在生产环境运行时触发,本地开发环境很难复现排查。

触发原因

undici遵循Web标准流规范,不再兼容Node.js原生的Stream对象,如果代码中直接返回、透传了Node原生可读流,就会触发该报错。
常见触发场景包括:

  • 服务端接口逻辑直接返回Node原生Readable流作为响应内容
  • 引入的第三方npm包内部返回Node原生流,未做Web标准流转换
  • 自定义服务端钩子、中间件处理流数据时,直接透传了Node原生流对象

解决方法

  • 流格式转换(推荐):使用Node.js内置方法将Node原生流转换为Web标准ReadableStream后再使用,转换逻辑非常简单:
// 引入Node.js流模块
import { Readable } from 'node:stream';

// 此处替换为你实际拿到的Node原生可读流
const nodeNativeStream = getYourOriginStream();
// 转换为Web标准可读流
const webStandardStream = Readable.toWeb(nodeNativeStream);

如果是在+server.js/+server.ts服务端路由中返回流,直接把转换后的Web标准流传入Response即可:

export function GET() {
  const nodeStream = getFileStream();
  return new Response(Readable.toWeb(nodeStream), {
    headers: {
      "Content-Type": "application/pdf" // 替换为实际返回内容的MIME类型
    }
  })
}
  • 依赖排查替换:如果报错是第三方依赖触发的,可以先升级对应依赖到最新版本,看官方是否已经做了Web流适配;如果依赖长期未更新,可以替换为功能一致、支持Web标准流的其他包。
  • 临时版本锁定(应急用):如果上线紧急来不及改造代码,可以临时将SvelteKit版本锁定到引入undici之前的版本,后续有空再完成流适配改造,不建议长期使用旧版本。

内容的提问来源于stack exchange,提问作者user16126495

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 17:18:24