You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Expo React Native iOS集成Supabase时出现SharedArrayBuffer未找到错误

解决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,改用轮询
        }
      }
    )
    
  • 添加SharedArrayBuffer polyfill(不推荐)
    React Native的Hermes/JSC引擎原生不支持该API,第三方polyfill存在性能差、兼容性不稳定的问题,仅作为最后尝试:
    安装依赖后在项目入口导入:

    npm install sharedarraybuffer-polyfill
    
    // 在App.tsx或index.tsx顶部导入
    import 'sharedarraybuffer-polyfill';
    

验证方法

修改配置后重启Expo项目,调用createUser函数测试是否仍抛出SharedArrayBuffer未定义错误。

内容的提问来源于stack exchange,提问作者tscafie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 21:01:10