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

React 16+Node.js 21运行yarn start报错及后续问题求助

React 16.8.0 + Node.js 21 项目问题解决指南

1. 搞定OpenSSL兼容报错(digital envelope routines::unsupported)

你之前用export NODE_OPTIONS=--openssl-legacy-provider能临时解决,但每次启动都输入太麻烦,直接把配置写到package.json的脚本里更省心:

  • 修改package.json里的start和build脚本:
    "scripts": {
      "start": "NODE_OPTIONS=--openssl-legacy-provider react-scripts start",
      "build": "NODE_OPTIONS=--openssl-legacy-provider react-scripts build"
    }
    
    Windows用户换成set NODE_OPTIONS=--openssl-legacy-provider && react-scripts start即可。

2. 修复jest/require-hook代码检查错误

这个错误大概率是eslint-plugin-jest版本过高,和项目里的Jest、React版本不兼容:

  • 先把eslint-plugin-jest降级到27.x系列,适配性更好:
    yarn add eslint-plugin-jest@27 --dev
    
  • 如果还是不行,直接在.eslintrc.js里把这个规则关掉或者改成警告:
    module.exports = {
      rules: {
        "jest/require-hook": "off" // 暂时关闭,后续有精力再调整
      }
    }
    

3. 解决react/no-deprecated代码检查错误

React 16.8.0里部分API已被标记为废弃,eslint-plugin-react会检测这些用法:

  • 先检查eslint-plugin-react的版本,太高的话降级到7.x系列,适配React 16.8:
    yarn add eslint-plugin-react@7 --dev
    
  • 要是项目里确实在用废弃API(比如旧类组件生命周期),要么慢慢改成Hooks写法,要么先把这个规则关掉缓一缓:
    module.exports = {
      rules: {
        "react/no-deprecated": "off" // 或者改成"warn",提醒自己后续整改
      }
    }
    

额外提醒

  • 长远来看,不妨逐步升级React版本(先升到16.x最新版,再往17、18过渡),同步更新react-scripts、ESLint插件等依赖,从根源解决兼容问题。
  • Node.js 21是非LTS版本,换成20.x LTS版本会更稳定,少踩一些奇怪的坑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 12:14:56