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脚本:
Windows用户换成"scripts": { "start": "NODE_OPTIONS=--openssl-legacy-provider react-scripts start", "build": "NODE_OPTIONS=--openssl-legacy-provider react-scripts build" }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
相关产品推荐
相关产品推荐

