如何检测前端应用是否已导入zone-patch-fetch补丁?
检测zone-patch-fetch是否已导入的方法
可以通过以下几种可靠方式检测前端应用是否导入了zone.js/plugins/zone-patch-fetch:
方法一:检查fetch的原始函数备份属性
zone-patch-fetch导入后,会对原生fetch进行包装,并将原始函数存储在fetch.__zone_symbol__original属性中。通过判断该属性是否存在即可检测:
const hasZonePatchFetch = typeof fetch !== 'undefined' && !!fetch.__zone_symbol__original; console.log(hasZonePatchFetch); // 返回true则说明已导入补丁
方法二:验证fetch返回的Promise类型
补丁会让fetch返回ZoneAwarePromise(Zone.js包装后的Promise),这类Promise带有__zone_symbol__state等Zone专属属性。可以通过以下代码验证:
async function checkZonePatchFetch() { if (typeof fetch === 'undefined') return false; // 发起无实际请求的fetch调用,避免网络错误影响结果 const testPromise = fetch('about:blank').catch(() => {}); return !!testPromise.__zone_symbol__state; } checkZonePatchFetch().then(isPatched => console.log(isPatched));
注意事项
- 若有其他第三方库也对
fetch进行了包装,可能会干扰检测结果,但zone-patch-fetch的__zone_symbol__前缀属性是Zone.js专属标识,误判概率极低。 - 需确保代码在
fetch对象可用的环境中执行(即浏览器或支持fetch的Node.js环境)。
内容的提问来源于stack exchange,提问作者Matthieu Riegler
相关产品推荐
相关产品推荐

