React Native项目使用thinbus-srp库的crypto依赖适配与非npm分支引入问题
Expo(React Native)项目使用thinbus-srp的适配方案
问题原因
原生thinbus-srp依赖的random-strings库调用了Node.js内置的crypto模块,而React Native/Expo环境没有内置该原生模块,npm上公开的crypto包早已废弃为占位符,直接安装无法解决问题。
方案1:自行配置polyfill替换crypto依赖
如果要继续使用原版thinbus-srp,可通过模块别名替换的方式完成适配:
- 首先安装Expo官方的crypto兼容包:
npx expo install expo-crypto,同时安装babel模块解析插件:npm install --save-dev babel-plugin-module-resolver - 新建自定义polyfill文件(比如
src/polyfills/crypto.js),用expo-crypto或者CryptoJS的API对齐Node.jscrypto模块的调用方法,覆盖random-strings用到的随机数生成、哈希等接口 - 在
babel.config.js中添加模块别名配置,将所有对crypto的引用指向你写的polyfill文件:
module.exports = function(api) { api.cache(true); return { presets: ['babel-preset-expo'], plugins: [ ['module-resolver', { alias: { 'crypto': './src/polyfills/crypto.js', }, }], ], }; };
- 配置完成后清除缓存重启项目生效:
npx expo start --clear
方案2:直接引入适配好的react-native-thinbus-srp分叉
该分叉已经完成了React Native环境的兼容处理,无需额外配置polyfill,即使没有发布到npm也可以直接从Git源安装:
- 执行安装命令直接拉取Git仓库代码作为依赖:
npm install git+https://github.com/eXhausted/react-native-thinbus-srp.git - 把原有代码中所有
import ... from 'thinbus-srp'的语句替换为import ... from 'react-native-thinbus-srp'即可直接使用
内容的提问来源于stack exchange,提问作者T3db0t
相关产品推荐
相关产品推荐

