Expo React Native iOS集成Supabase时出现SharedArrayBuffer未找到错误
问题背景
使用Expo开发React Native iOS项目,配置@supabase/supabase-js对接本地Supabase-cli实例后,出现阻碍开发的错误:Unhandled JS Exception: Can't find variable: SharedArrayBuffer。已通过react-native-url-polyfill/auto处理了URL兼容问题,现需解决该新错误。
触发错误的TypeScript代码示例:
import { createClient } from "@supabase/supabase-js"; import {Database} from "../../lib/supabase/database.types"; import 'react-native-url-polyfill/auto' interface CreateUserOpts { name: string; username: string; phone: string; password: string; } const supabaseUrl = "http://localhost:54321"; const supabaseAnonKey = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZS1kZW1vIiwicm9sZSI6ImFub24iLCJleHAiOjE5ODM4MTI5OTZ9.CRXP1A7WOeoJeXxjNni43kdQwgnWNReilDMblYTn_I0"; const client = createClient<Database>( supabaseUrl, supabaseAnonKey, { auth: { detectSessionInUrl: false } } ) export const createUser = async (opts: CreateUserOpts) => { const {phone, password, ...additionalOpts} = opts; return client.auth.signUp({ password: password, phone: phone, options: { data: { ...additionalOpts } } }) }
解决方向
降级Supabase JS SDK版本
SharedArrayBuffer是浏览器专属API,React Native环境原生不支持。Supabase JS SDK v2.30+版本引入了依赖该API的特性,降级到v2.29.0或更早版本可避开问题:npm install @supabase/supabase-js@2.29.0 # 或使用yarn yarn add @supabase/supabase-js@2.29.0配置Supabase客户端禁用依赖
SharedArrayBuffer的特性
创建客户端时,通过realtime配置关闭WebSocket相关功能(SharedArrayBuffer主要用于实时模块),改用轮询模式:const client = createClient<Database>( supabaseUrl, supabaseAnonKey, { auth: { detectSessionInUrl: false }, realtime: { transport: 'polling' // 禁用WebSocket,改用轮询 } } )添加
SharedArrayBufferpolyfill(不推荐)
React Native的Hermes/JSC引擎原生不支持该API,第三方polyfill存在性能差、兼容性不稳定的问题,仅作为最后尝试:
安装依赖后在项目入口导入:npm install sharedarraybuffer-polyfill// 在App.tsx或index.tsx顶部导入 import 'sharedarraybuffer-polyfill';
验证方法
修改配置后重启Expo项目,调用createUser函数测试是否仍抛出SharedArrayBuffer未定义错误。
内容的提问来源于stack exchange,提问作者tscafie
相关产品推荐
相关产品推荐

