Monorepo架构React Native应用执行yarn start时遇哈希兼容错误
解决React Native Monorepo中yarn start的ERR_OSSL_EVP_UNSUPPORTED错误
这个错误是Node.js 17+版本默认启用OpenSSL 3.0的严格算法规则,而旧版Metro打包工具依赖的哈希算法不再被支持导致的,以下是几种解决方式:
临时快速解决(单次生效)
根据你的操作系统执行对应命令:
- Mac/Linux:
NODE_OPTIONS=--openssl-legacy-provider yarn start - Windows CMD:
set NODE_OPTIONS=--openssl-legacy-provider && yarn start - Windows PowerShell:
$env:NODE_OPTIONS="--openssl-legacy-provider"; yarn start
永久修改脚本(推荐)
修改项目根目录的package.json,给start命令添加环境变量:
"scripts": { "start": "NODE_OPTIONS=--openssl-legacy-provider react-native start" }
如果需要跨系统兼容,先安装cross-env依赖:
yarn add cross-env -D
再修改脚本:
"scripts": { "start": "cross-env NODE_OPTIONS=--openssl-legacy-provider react-native start" }
Monorepo环境下,确保在对应的React Native项目目录下修改package.json,或者使用workspace命令统一配置。
升级Metro依赖(长期方案)
升级Metro相关包到支持Node.js 17+的版本,从根源解决问题:
yarn upgrade metro metro-cache metro-react-native-babel-preset --latest
如果是Monorepo,指定目标项目执行:
yarn workspace [你的RN项目名称] upgrade metro metro-cache metro-react-native-babel-preset --latest
全局环境变量设置(不推荐)
不建议全局设置,会影响所有Node.js进程:
- Mac/Linux:在
~/.bashrc或~/.zshrc中添加:
执行export NODE_OPTIONS=--openssl-legacy-providersource ~/.bashrc或source ~/.zshrc生效。 - Windows:在系统环境变量中添加
NODE_OPTIONS,值为--openssl-legacy-provider。
内容的提问来源于stack exchange,提问作者karthick
相关产品推荐
相关产品推荐

