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

升级至Expo SDK 50后出现Module not found: Can't resolve 'crypto'错误

升级至Expo SDK 50后出现Module not found: Can't resolve 'crypto'错误

看起来你在升级到Expo SDK 50后遇到了Node.js核心模块crypto的解析问题,这其实是版本升级带来的常见变化——Expo SDK 50基于React Native 0.73,而这个版本开始默认不再自动polyfill Node.js的核心模块(比如crypto),之前依赖自动polyfill的代码自然就会报错。

下面给你两种解决方案,优先推荐第一种官方适配的方式:

方案一:使用Expo官方的expo-crypto库(推荐)

Expo专门为移动端环境提供了加密工具库expo-crypto,完全可以替代Node.js的crypto模块生成UUID,兼容性和稳定性都更有保障。

  1. 首先安装依赖:
npx expo install expo-crypto
  1. 修改你的UUID生成代码,替换掉原来的crypto引用:
import v35 from './lib/v35';
import { Uuidv5Namespace } from './uuid.types';
import * as Crypto from 'expo-crypto';

function uuidv4() {
  try {
    // 使用expo-crypto提供的原生适配方法生成UUID
    return Crypto.randomUUID();
  } catch (error) {
    throw Error("无法生成UUID,请确认expo-crypto已正确安装并配置");
  }
}

这样修改后,代码就能在Expo环境下正常运行,完全不需要依赖Node.js的crypto模块。

方案二:手动polyfill Node.js的crypto模块(适合无法修改依赖代码的场景)

如果你的项目依赖了第三方库,没办法直接替换crypto的使用,那可以通过配置Metro来手动添加polyfill:

  1. 安装所需的polyfill依赖:
npm install crypto-browserify react-native-polyfill-globals
  1. 修改metro.config.js,配置Metro解析crypto时指向polyfill库:
const { getDefaultConfig } = require('expo/metro-config');

const config = getDefaultConfig(__dirname);

// 添加crypto的polyfill映射
config.resolver.extraNodeModules = {
  ...config.resolver.extraNodeModules,
  crypto: require.resolve('crypto-browserify'),
};

module.exports = config;
  1. 在项目的入口文件(比如App.js或者index.js)顶部添加polyfill的导入:
// 自动polyfill Node.js核心模块
import 'react-native-polyfill-globals/auto';

完成这些配置后,Metro会自动将require('crypto')解析为crypto-browserify,从而解决模块找不到的问题。

备注:内容来源于stack exchange,提问作者Essa Mohammad

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.16 09:58:03