Expo React Native在Expo Go报Can't find variable: TextDecoder
报错原因
这是React Native跨端环境API不一致导致的典型错误:
- 浏览器环境原生实现了Web标准的
TextDecoder/TextEncoder编码API,因此项目在Web端可正常运行 - Expo Go 内的React Native原生JS运行时(Android默认Hermes引擎、旧版iOS JavaScriptCore引擎)未内置上述两个API
- 项目依赖的第三方库(编码处理工具、云服务SDK、Web3类库等是高发场景)调用
TextDecoder时,运行环境找不到对应变量就会抛出该引用错误。
修复方案
方案1:通用polyfill补全API(优先推荐)
- 在项目根目录执行命令,安装Expo兼容的polyfill依赖:
npx expo install text-encoding
- 打开项目入口文件(通常是根目录下的
App.js/App.tsx,若存在自定义index.js则选择该文件),在所有其他导入语句的最顶部加入polyfill导入:
// 必须放在所有import的最前面,先于业务代码、第三方库加载 import 'text-encoding';
- 清除Metro打包缓存,重启开发服务:
npx expo start -c
重新在Expo Go中打开项目即可正常运行。
方案2:Hermes引擎兼容方案
如果方案1在Android Hermes环境下存在兼容问题,可替换为轻量编码polyfill:
- 安装对应依赖:
npx expo install fastestsmallesttextencoderdecoder
- 同样在入口文件最顶部加入导入语句:
import 'fastestsmallesttextencoderdecoder';
- 执行
npx expo start -c清缓存重启服务即可。
注意:polyfill导入必须放在所有导入逻辑的最顶部,否则第三方依赖加载时仍会找不到
TextDecoder变量;重启服务必须加-c参数清除旧打包缓存,否则缓存的历史bundle会导致修复不生效。
内容的提问来源于stack exchange,提问作者José Carlos
相关产品推荐
相关产品推荐

