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

PollyJS能否与Node 18原生fetch兼容?已知问题咨询

Node 18 原生 fetch 搭配 PollyJS 的已知问题说明

目前PollyJS官方问题追踪器里确实没明确标注和Node 18原生fetch兼容的已知问题,但实际用的时候得注意几个细节:

  • 全局fetch的劫持方式差异:node-fetch是第三方包,PollyJS能通过拦截模块导入的方式劫持请求;但Node 18原生fetch是全局API,得确保PollyJS的@pollyjs/adapter-fetch适配器能正确识别并拦截全局fetch调用,部分场景下需要手动指定劫持全局的fetch对象。

  • 请求/响应对象的细微差别:虽然两者API兼容,但底层实现的请求、响应对象在某些属性(比如headers的具体结构、响应状态码的处理逻辑)上有细微差异,可能导致PollyJS录制的回放数据适配时出现不一致。建议先录少量请求测试回放效果,对比两种fetch下的响应结构是否一致。

  • 旧版本原生fetch的实验性限制:Node 18早期版本的原生fetch是实验性特性(需--experimental-fetch启用),后续稳定版虽移除了实验性标识,但像重定向处理、自定义Agent这类边缘场景的实现,可能和node-fetch有差异,间接影响PollyJS的录制/回放逻辑。

  • 适配器版本要新:确保用的@pollyjs/adapter-fetch是最新版本,旧版本的适配器可能没针对Node原生fetch做适配,会导致拦截失效。

如果测试时遇到拦截失败或回放异常,可以试试手动初始化Polly时指定劫持全局fetch:

import { Polly } from '@pollyjs/core';
import FetchAdapter from '@pollyjs/adapter-fetch';

Polly.register(FetchAdapter);

const polly = new Polly('record-session', {
  adapters: ['fetch'],
  adapterOptions: {
    fetch: {
      fetch: globalThis.fetch // 明确指定要劫持的全局fetch对象
    }
  }
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 03:24:27