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

使用Expo构建APK时报错Cannot find module crypto,如何解决?

Expo构建APK提示Cannot find module crypto错误解决方案

完整报错信息如下:

While trying to resolve module `crypto` from file `C:\Users\EDGAR\Desktop\DStarMobileApp\node_modules\jws\node_modules\jwa\index.js`, the package `C:\Users\EDGAR\Desktop\DStarMobileApp\node_modules\crypto\package.json` was successfully found. However, this package itself specifies a `main` module field that could not be resolved (`C:\Users\EDGAR\Desktop\DStarMobileApp\node_modules\crypto\index.js`. Indeed, none of these files exist:      

  * C:\Users\EDGAR\Desktop\DStarMobileApp\node_modules\crypto\index.js(.native|.ios.ts|.native.ts|.ts|.ios.tsx|.native.tsx|.tsx|.ios.js|.native.js|.js|.ios.jsx|.native.jsx|.jsx|.ios.json|.native.json|.json)
  * C:\Users\EDGAR\Desktop\DStarMobileApp\node_modules\crypto\index.js\index(.native|.ios.ts|.native.ts|.ts|.ios.tsx|.native.tsx|.tsx|.ios.js|.native.js|.js|.ios.jsx|.native.jsx|.jsx|.ios.json|.native.json|.json)
Error: While trying to resolve module `crypto` from file `C:\Users\EDGAR\Desktop\DStarMobileApp\node_modules\jws\node_modules\jwa\index.js`, the package `C:\Users\EDGAR\Desktop\DStarMobileApp\node_modules\crypto\package.json` was successfully found. However, this package itself specifies a `main` module field that could not be resolved (`C:\Users\EDGAR\Desktop\DStarMobileApp\node_modules\crypto\index.js`. Indeed, none of these files exist:

  * C:\Users\EDGAR\Desktop\DStarMobileApp\node_modules\crypto\index.js(.native|.ios.ts|.native.ts|.ts|.ios.tsx|.native.tsx|.tsx|.ios.js|.native.js|.js|.ios.jsx|.native.jsx|.jsx|.ios.json|.native.json|.json)

错误根因

  • crypto是Node.js服务端内置模块,React Native(Expo)运行环境不存在该原生模块的官方实现
  • 项目依赖的jwa/jws是服务端JWT相关库,默认会调用Node内置crypto模块,项目中安装的空占位crypto包没有实际实现代码,所以找不到入口文件

修复步骤

  • 第一步:卸载错误安装的空crypto包
    npm用户执行:npm uninstall crypto
    yarn用户执行:yarn remove crypto
  • 第二步:安装Expo环境兼容的crypto替代实现
    执行:npx expo install expo-crypto
  • 第三步:修改项目根目录的metro.config.js,添加模块别名配置,让所有依赖调用crypto时都指向expo-crypto,参考配置如下:
const { getDefaultConfig } = require('expo/metro-config');

const config = getDefaultConfig(__dirname);

config.resolver.alias = {
  ...config.resolver.alias,
  'crypto': 'expo-crypto',
};

module.exports = config;
  • 第四步:清除缓存后重新构建
    开发测试执行:npx expo start --clear
    构建APK前先执行:npx expo prebuild --clean清理旧构建缓存

备用方案

如果上述方案不生效,说明项目中的jws/jwa依赖无法适配expo-crypto,直接替换服务端JWT库为React Native兼容版本:
卸载原有jws/jsonwebtoken等服务端JWT库,换成jwt-decode等专门适配RN环境的JWT处理库,避免调用Node原生模块。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 14:45:00