Error: ReferenceError: ReadableStream is not defined

midway项目在build完,docker启动时,莫名地报错Error: ReferenceError: ReadableStream is not defined,之前一直好好地,初时以为是新加的代码引起,后来排除了。
报错如下:

2024-08-20 11:57:51.446 ERROR 18 ReferenceError: ReadableStream is not defined
    at Object.<anonymous> (/app/node_modules/undici/lib/web/fetch/response.js:527:3)
    at Module._compile (node:internal/modules/cjs/loader:1101:14)
    at Object.Module._extensions..js (node:internal/modules/cjs/loader:1153:10)
    at Module.load (node:internal/modules/cjs/loader:981:32)
    at Function.Module._load (node:internal/modules/cjs/loader:822:12)
    at Module.require (node:internal/modules/cjs/loader:1005:19)
    at require (node:internal/modules/cjs/helpers:102:18)
    at Object.<anonymous> (/app/node_modules/undici/lib/web/fetch/index.js:11:5)
    at Module._compile (node:internal/modules/cjs/loader:1101:14)
    at Object.Module._extensions..js (node:internal/modules/cjs/loader:1153:10)
2024-08-20 11:57:51.448 INFO 18 [midway:bootstrap] exit with code:1

在这里插入图片描述

又怀疑是package.json配置问题,与其他启动成功的项目进行对比,没发现有什么差异。回滚也是不行,估计中有关联的包更新了。

查看了报错包在github上的issues,有7条记录,逐一查看后将里面提的方法都试了一遍,有些不知道是配置不对还是怎样,问题依旧。

包括:

import { ReadableStream } from "node:stream/web";
this.global.ReadableStream = ReadableStream;
import { ReadableStream } from 'node:stream/web';

globalThis.ReadableStream = ReadableStream;

在无果之后,想到去更改Dockerfile,将nodejs版本由16改成18。Build完后成功启动了。

还有个办法是好心的网友帮忙找到,但是本人暂未试验过。

需要指定cheerio版本,在package.json 添加 resolutions 字段,指定 cheerio 的版本:"resolutions": {
"cheerio": "1.0.0-rc.12"
} resolutions是和 dependencies同级的

上面方法对应的链接是 https://github.com/tengmaoqing/vite-plugin-qiankun/issues/76

### 回答1: 这是一个 JavaScript 程序的错误消息,表示在代码中使用了未定义的 "fetch" 函数。fetch 是 JavaScript 中的一个内置函数,用于发出网络请求,获取远程数据。如果在代码中没有正确引入 fetch 函数,将导致这个错误。 要解决此问题,请确保在使用 fetch 函数之前已正确引入它。如果您正在使用浏览器,则 fetch 函数是内置的,无需进一步引入。如果您正在使用 Node.js,则需要安装和引入 node-fetch 库才能使用 fetch 函数。 ### 回答2: 这个错误是由于在代码中使用了fetch函数,但是这个函数并没有被定义所导致的。 fetch函数是一个用于发送HTTP请求并且返回一个Promise对象的现代浏览器内置函数。在一些较旧的浏览器版本中,这个函数可能不被支持。 要解决这个问题,有两个选择: 1. 使用一个支持fetch函数的现代浏览器或者更新浏览器版本,这样就可以直接使用fetch函数了。 2. 如果你需要在不支持fetch函数的浏览器中使用它,可以考虑使用一个类似于"whatwg-fetch"的库。这个库是一个polyfill(垫片)库,可以在不支持fetch函数的浏览器中提供类似的功能。 使用"whatwg-fetch"库的步骤如下: - 在你的项目中安装"whatwg-fetch"库,可以使用npm或者其他包管理工具。 - 在你的代码中引入"whatwg-fetch"库,通常是在入口文件(比如index.js)中引入。 - 确保你在引入"whatwg-fetch"之前没有使用过fetch函数,否则会出现冲突。 - 重新运行你的代码,现在就可以在不支持fetch函数的浏览器中使用它了。 总结:ReferenceError: fetch is not defined 报错是因为fetch函数在代码中未定义,可以通过使用支持fetch函数的现代浏览器或者引入"whatwg-fetch"库来解决这个问题。 ### 回答3: 报错"ReferenceError: fetch is not defined" 是由于当代码尝试使用fetch函数时,它没有被定义或声明的错误。在JavaScript中,fetch是一个用于发送网络请求的函数,用于获取远程数据或资源。 首先,我们需要确认代码是否在浏览器环境下运行。因为fetch是现代浏览器中的功能,如果代码在旧版浏览器或Node.js环境中运行,就可能会出现该错误。如果是这种情况,我们需要考虑使用其他方法或工具来发送网络请求,比如使用XMLHttpRequest或引入适当的第三方库来进行请求。 如果我们确定代码在现代浏览器环境下运行,那么有可能是由于某些原因未正确引入fetch函数。在这种情况下,我们需要确保在代码中正确引入fetch函数。 如果你的代码是通过script标签直接嵌入HTML文件中,可以使用以下方式引入fetch函数的兼容性版本: ```html <script src="https://cdnjs.cloudflare.com/ajax/libs/fetch/2.0.3/fetch.min.js"></script> ``` 如果你的项目使用模块化工具(如Webpack、Rollup等),可以使用以下方式安装并引入fetch函数: 使用npm安装: ```bash npm install whatwg-fetch --save ``` 然后在代码中引入: ```javascript import 'whatwg-fetch'; ``` 另外,在某些情况下,如果你使用了React Native等特定环境,可以尝试使用其他类似fetch的函数,如axios或superagent来替代fetch函数。 通过以上方法,你应该能够解决这个报错并成功使用fetch函数发送网络请求。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lcwai

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值