Expo React Native找不到变量:文本解码器

dm7nw8vv  于 2023-08-07  发布在  React
关注(0)|答案(3)|浏览(109)

因此,由于某种原因,我有这个错误时,我试图运行的应用程序在世博会去应用程序在我的手机。如果我在Web浏览器上运行,显然是可以的。
这是错误日志
参考错误:找不到变量:文本解码器
堆栈跟踪:
node_modules\expo\build\environment\react-native-logs.fx.js:27:4错误
node_modules\react-native\Libraries\Core\ExceptionsManager.js:95:4 in reportException
node_modules\react-native\Libraries\Core\ExceptionsManager.js:141:19 in handleException
node_modules\react-native\Libraries\Core\setUpErrorHandling.js:24:6 in handleError
node_modules@react-native\polyfills\error-guard.js:49:36 in ErrorUtils.reportFatalError
node_modules\metro-runtime\src\polyfills\require.js:203:6 in guardedLoadModule
http://192.168.0.29:19000/node_modules%5Cexpo%5CAppEntry.bundle?platform=android&dev=true&hot=false&strict=false&minify=false:190345:3 in global code.

nhaq1z21

nhaq1z211#

这也发生在我们身上,在一个曾经在旧的世博会版本中工作的应用程序上。我们的解决方案是将这一行添加到.babelrc.js文件中:

"presets": [
  ["babel-preset-expo", {
    lazyImports: true, // <<< The fix
  ]
]

字符串

edqdpe6u

edqdpe6u2#

通过这样做解决了这个问题;
第一个月
npm install big-integer
并将此代码粘贴到node_modules>react-native>Libraries>LogBox中

const TextEncodingPolyfill = require('text-encoding');
const BigInt = require('big-integer')
Object.assign(global, {
  TextEncoder: TextEncodingPolyfill.TextEncoder,
  TextDecoder: TextEncodingPolyfill.TextDecoder,
  BigInt: BigInt,
});

字符串

slwdgvem

slwdgvem3#

它在网络上工作而不是在手机上工作的原因是因为TextDecoder是一个Web API,通常在所有现代浏览器JS引擎中可用,但它不支持爱马仕(React Native的JS引擎)。解决此问题的方法是为API使用polyfill并将其全局公开。
一个简单的方法是使用这个polyfill library。另一种方法是模仿该库的功能,这使您可以更灵活地选择要使用的polyfill,因为有许多选项可供选择(例如,请参阅此处的竞争对手列表)。为此,您需要安装您选择的polyfill(例如:npx expo install text-encoding),然后创建一个包含以下内容的文件:

import { polyfillGlobal } from "react-native/Libraries/Utilities/PolyfillFunctions"

const applyGlobalPolyfills = () => {
  const { TextEncoder, TextDecoder } = require("text-encoding")

  polyfillGlobal("TextEncoder", () => TextEncoder)
  polyfillGlobal("TextDecoder", () => TextDecoder)
}

export default applyGlobalPolyfills

字符串
然后将这个文件导入到你的App.js文件中(或者如果使用Expo的Router v2,则导入到你的root _layout.js文件中),并像这样调用导出的函数:

import applyGlobalPolyfills from "path/to/applyGlobalPolyfills" // <-- Change the path
applyGlobalPolyfills()

// ...rest of App.js file


可能值得注意的是,您可以添加任何其他需要支持这种方式的全局API。您可以将其添加到同一个文件中,也可以将其拆分为每个全局API的不同util函数,以进行树摇动等。

相关问题