Error: ReferenceError: ReadableStream is not defined

如图,记录下。
环境

"vue": "^3.2.47"

"element-plus": "^2.3.6"

"vite-plugin-qiankun": "^1.0.15"

"vite": "^4.3.9"

解决方式一:

有人这么说:(我这里并没有好用)

"vite-plugin-qiankun": "1.0.15" 这个版本已经用了一年多,今天突然打包时报错报错原因是引用了undici ,我发现是包里引用了cheerio库 "cheerio": "^1.0.0-rc.10" ,cheerio 3天前更新了最新版本1.0.0之后。就出现该问题

需要指定cheerio版本,在package.json 添加 resolutions 字段,指定 cheerio 的版本:

resolutions是和 dependencies同级的

"resolutions": {
     "cheerio": "1.0.0-rc.12"
}

解决方式二:

有人这么说:(我不愿意,是不是有点没办法了?但是方法确实可以)

升级node版本 18+(我这里本身16.15.0)

解决方式二:

有人这么说:(我采用的)

删除 node_modules
删除 package-lock.json

执行 npm cache clean -f

执行 npm install

执行 npm i cheerio@1.0.0-rc.10

以上到此就算是解决了:Error: ReferenceError: ReadableStream is not defined
 

这时候或许会报警告:

Deprecation Warning: The legacy JS API is deprecated and will be removed in Dart Sass 2.0.0.

大致意思是:在vue3+vite项目中,使用低sass版本低于2.0.0的,会有上面这个警告

解决方式:(我用的是方法二)

方法一:

export default defineConfig(({ mode }) => {
  ``````
  return {
    ``````
    css: {
      preprocessorOptions: {
        scss: {
          api: 'modern-compiler' // or "modern"
        },
      },
    },
    ``````
  }
  ``````
})

方法二:

export default defineConfig(({ mode }) => {
  ``````
  return {
    ``````
    css: {
      preprocessorOptions: {
        scss: {
          silenceDeprecations: ['legacy-js-api'],
        },
      },
    },
    ``````
  }
  ``````
})

这个时候,基本解决了以上问题。如有其他错误欢迎探讨!!!

<think>我们正在处理一个JavaScript运行时错误:ReferenceError: globalThiw is not defined。这个错误表明在代码中尝试使用了一个名为`globalThiw`的变量或对象,但它并没有被定义。 根据引用[1]中提到的类似错误(Uncaught ReferenceError: process is not defined),我们可以知道这类错误通常是因为在当前环境中没有定义该变量。引用[2]则提供了一个解决未定义变量的方法,即通过引入外部库(如jQuery)来定义缺失的变量。 然而,我们的错误是关于`globalThiw`的,这看起来像是一个拼写错误。通常,在JavaScript中,我们使用`globalThis`来引用全局对象(在浏览器中是`window`,在Node.js中是`global`)。因此,这里可能是拼写错误,将`globalThis`写成了`globalThiw`。 ### 解决步骤 1. **检查拼写**:首先,检查代码中所有出现`globalThiw`的地方,确认是否应该是`globalThis`。如果是拼写错误,修正即可。 2. **如果确实需要使用`globalThiw`**:如果代码中确实需要`globalThiw`这个变量(例如,它是某个库提供的全局变量),那么我们需要确保在使用之前已经定义了这个变量。可以通过以下方式之一: - 如果是自己的代码,在全局作用域中定义它,例如: ```javascript // 在脚本的最顶部定义 var globalThiw = ...; // 赋予适当的值 ``` - 如果是某个库提供的,确保在代码执行前已经加载了该库。 3. **使用`globalThis`替代**:如果本意是要使用标准的全局对象,那么将`globalThiw`替换为`globalThis`。 4. **检查执行环境**:确保代码在支持`globalThis`的环境中运行。`globalThis`是ES2020标准的一部分,现代浏览器和Node.js(版本12以上)都支持。如果环境较旧,可能需要使用polyfill或者用其他方式获取全局对象(例如在浏览器中用`window`,在Node.js中用`global`)。 ### 示例代码 假设我们有以下错误代码: ```javascript // 错误的代码,因为globalThiw未定义 console.log(globalThiw); ``` 修正为: ```javascript // 使用正确的globalThis console.log(globalThis); ``` 或者,如果环境不支持`globalThis`,可以使用以下兼容写法: ```javascript // 获取全局对象,兼容浏览器和Node.js const globalObj = (typeof window !== 'undefined') ? window : (typeof global !== 'undefined') ? global : (typeof self !== 'undefined') ? self : this; console.log(globalObj); ``` ### 注意事项 - 如果错误发生在第三方库中,那么可能需要更新该库到最新版本,或者检查是否有正确的引入方式。 - 如果是在构建工具(如Webpack)中遇到此问题,可能需要检查配置,确保全局变量被正确注入。 ### 相关问题 §§相关问题§§ 1. 如何在不同JavaScript环境中获取全局对象? 2. ES2020中`globalThis`的作用是什么? 3. 如何处理第三方库中出现的未定义变量错误? 4. 如何为旧环境添加`globalThis`的polyfill?</think>### 解决 `ReferenceError: globalThiw is not defined` 错误 这个错误表明 JavaScript 代码尝试访问未定义的变量 `globalThiw`。以下是逐步解决方案: #### 1. **检查变量名拼写(最常见原因)** - `globalThiw` 极可能是 `globalThis` 的拼写错误(JavaScript 的标准全局对象) - 在代码中全局搜索 `globalThiw`,替换为 `globalThis` ```javascript // 错误示例 console.log(globalThiw); // ❌ 引发错误 // 正确修改 console.log(globalThis); // ✅ 正确引用全局对象 ``` #### 2. **检查作用域定义** 如果确实需要 `globalThiw` 变量: - 在使用前显式声明(推荐使用严格模式): ```javascript 'use strict'; // 在全局或模块顶部声明 const globalThiw = {}; // 或 window/global 根据环境 // 后续使用 sclEngine.init(globalThiw); ``` #### 3. **处理模块化环境** 如果是模块(ESM/CommonJS): ```javascript // 显式挂载到全局(浏览器) if (typeof window !== 'undefined') { window.globalThiw = sclEngineConfig; } // Node.js 环境 else if (typeof global !== 'undefined') { global.globalThiw = sclEngineConfig; } ``` #### 4. **依赖加载顺序问题** - 确保定义 `globalThiw` 的脚本**先于** sclEngine 加载: ```html <!-- 先加载定义 --> <script src="define-globalThiw.js"></script> <!-- 后使用 --> <script src="sclEngine.js"></script> ``` #### 5. **Polyfill 方案(兼容旧环境)** ```javascript // 在入口文件最顶部添加 (function() { if (typeof globalThiw === 'undefined') { window.globalThiw = {}; // 浏览器 // 或 global.globalThiw = {}; // Node.js } })(); ``` ### 错误预防建议 1. **启用严格模式**:在文件开头添加 `'use strict'`,阻止意外创建全局变量 2. **使用 lint 工具**:配置 ESLint 规则 [`no-undef`](https://eslint.org/docs/rules/no-undef) 3. **类型检查**:使用 TypeScript 或 JSDoc 标注类型 ```typescript declare const globalThiw: SclEngineConfig; // TS类型声明 ``` > 通过以上步骤,90% 以上的此类错误可被解决。若问题持续,请检查 sclEngine 的文档确认其依赖的全局变量名称[^1][^2]。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值