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

升级Node至17.0.0后React Native构建出现transformFile及OpenSSL报错

问题原因

你遇到的两个报错存在直接关联:

  • TypeError: Cannot read properties of undefined (reading 'transformFile') 属于次生报错
  • 根因是第二个报错 ERR_OSSL_EVP_UNSUPPORTED

Node 17及以上版本默认启用了OpenSSL 3.0,该版本废弃了部分老版本的哈希算法,而你项目中使用的Metro(React Native官方打包工具)版本依赖老的哈希算法实现,导致Transformer初始化失败,后续调用transformFile方法时就会抛出未定义的错误。

解决方案

方案1:降级Node到兼容版本(最稳定,推荐)

React Native官方对高版本Node的适配有滞后性,目前主流稳定项目推荐使用Node 16.x LTS版本,降级到该版本后清理缓存重新构建即可解决问题。
操作步骤:

  • 卸载当前Node 17版本,安装Node 16.x LTS版本,如果你使用nvm管理Node版本,执行以下命令:
nvm install 16
nvm alias default 16
  • 清理项目缓存重新构建:
rm -rf node_modules && npm install
cd ios && pod install && cd ..
npm start -- --reset-cache

方案2:启用OpenSSL legacy provider(无需降级Node,适合临时调试)

如果不想降级Node版本,可以在启动打包命令前添加环境变量NODE_OPTIONS=--openssl-legacy-provider,兼容老版本哈希算法。

单次启动生效:

  • Mac/Linux终端执行:
NODE_OPTIONS=--openssl-legacy-provider npm start
  • Windows cmd执行:
set NODE_OPTIONS=--openssl-legacy-provider
npm start
  • Windows PowerShell执行:
$env:NODE_OPTIONS = "--openssl-legacy-provider"
npm start

永久写入项目配置:

可以直接修改package.json中的启动脚本,跨平台环境可搭配cross-env使用:

"scripts": {
  "start": "cross-env NODE_OPTIONS=--openssl-legacy-provider react-native start",
  "android": "cross-env NODE_OPTIONS=--openssl-legacy-provider react-native run-android",
  "ios": "cross-env NODE_OPTIONS=--openssl-legacy-provider react-native run-ios"
}

方案3:升级Metro到兼容版本(适合新项目)

如果你的React Native版本支持,可以将metro相关依赖升级到0.67.0及以上版本,该版本已经适配了OpenSSL 3.0的新算法,升级后无需其他修改即可正常构建。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 01:54:07