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
相关产品推荐
相关产品推荐

