React Native依赖jose时报Can't find variable: crypto如何解决
可行解决方案
- 方案1:使用原生实现的crypto polyfill全局注入
旧的node-libs-react-native、rn-nodeify已停止维护,不兼容RN 0.60+及以上版本,可替换为性能更好的原生实现polyfill:- 安装依赖:
npm install react-native-quick-crypto - iOS端执行
cd ios && pod install && cd ..完成原生依赖链接 - 在项目入口文件(通常为
index.js)最顶部添加如下代码,将crypto挂载到全局变量:
import crypto from 'react-native-quick-crypto' global.crypto = crypto- 调整
metro.config.js配置,给子依赖指向正确的polyfill路径,该配置对所有层级的依赖都生效:
module.exports = { resolver: { extraNodeModules: { crypto: require.resolve('react-native-quick-crypto'), // 若jose还依赖stream、buffer等其他node内置模块,可对应添加对应polyfill的路径 } } } - 安装依赖:
- 方案2:给子依赖jose打补丁,指定自定义crypto实现
若全局注入不生效,可使用patch-package直接修改jose的crypto调用逻辑:- 先安装
react-native-quick-crypto和patch-package - 找到
node_modules/jose下所有调用crypto全局变量的代码,替换为react-native-quick-crypto的导出 - 执行
npx patch-package jose生成补丁文件,后续安装依赖会自动应用该补丁
- 先安装
- 方案3:替换适配React Native的授权模块
若上述修改成本过高,可直接更换授权依赖,选择官方支持React Native的授权SDK,这类SDK通常会做原生侧适配,不会依赖Node.js内置的crypto模块。
如果是Expo项目,可直接替换react-native-quick-crypto为expo-crypto,其余配置逻辑一致。
内容的提问来源于stack exchange,提问作者Thamindu DJ
相关产品推荐
相关产品推荐

