Node.js18运行React报0308010C及react-in-jsx-scope错误咨询
问题描述
初始报错信息:Error: error:0308010C:digital envelope routines::unsupported Node.js v18.04.0
报错触发流程:
- 首次创建React项目启动时运行正常,后续看到控制台持续输出警告,执行
npm audit fix --force尝试修复警告 - 命令执行完成后重新启动项目,直接抛出上述OpenSSL相关错误
- 查到方案说把package.json里的启动脚本改成
"start": "react-scripts --openssl-legacy-provider start"可以解决问题,修改后原OpenSSL报错消失,但出现了10条同类型ESLint报错,内容如下:
Line 25: 'React' must be in scope when using JSX react/react-in-jsx-scope Line 26: 'React' must be in scope when using JSX react/react-in-jsx-scope Line 27: 'React' must be in scope when using JSX react/react-in-jsx-scope Line 28: 'React' must be in scope when using JSX react/react-in-jsx-scope Line 36: 'React' must be in scope when using JSX react/react-in-jsx-scope Line 37: 'React' must be in scope when using JSX react/react-in-jsx-scope Line 38: 'React' must be in scope when using JSX react/react-in-jsx-scope Line 45: 'React' must be in scope when using JSX react/react-in-jsx-scope Line 46: 'React' must be in scope when using JSX react/react-in-jsx-scope Line 47: 'React' must be in scope when using JSX react/react-in-jsx-scope
- 当前环境为Node.js 18版本,核心疑问:是否有必要降级到Node.js 16 LTS来解决上述问题?
回答
不需要降级Node.js版本,两个报错是完全独立的问题,按顺序处理即可:
- 先修复依赖错乱问题
npm audit fix --force会无视项目的版本依赖约束,强制升级、降级相关依赖包,这是你改完启动脚本后冒出JSX作用域报错的核心原因——你的react-scripts、ESLint相关依赖版本已经被这个命令改乱了。
直接删除项目目录下的node_modules文件夹和package-lock.json文件,重新执行npm install就能恢复初始的正确依赖版本。新手阶段不要随便执行带--force参数的audit修复命令,控制台输出的警告只要不阻塞项目运行可以先忽略,audit报的漏洞绝大多数存在于开发依赖中,本地开发场景下几乎不会产生实际安全影响。 - 处理Node.js 18的OpenSSL兼容问题
依赖恢复完成后先看你安装的react-scripts版本:- 版本号在5.0.0及以上的话,本身已经适配Node.js 18内置的OpenSSL 3.0,直接执行
npm start就能正常启动,不需要加任何额外启动参数 - 如果是5.0.0以下的旧版本,再给package.json里的start脚本加上
--openssl-legacy-provider参数即可,这时候不会再出现JSX相关的ESLint报错
- 版本号在5.0.0及以上的话,本身已经适配Node.js 18内置的OpenSSL 3.0,直接执行
- react/react-in-jsx-scope报错的补充处理
如果做完上面两步还是存在这个报错,二选一处理就行:- 所有写了JSX语法的文件顶部补上
import React from 'react'导入语句,这是React 17之前版本的强制语法要求 - 如果你用的是React 17及以上版本,直接在项目ESLint配置里关闭
react/react-in-jsx-scope规则即可,React 17之后的新版JSX转换已经不需要在每个文件里手动导入React。
- 所有写了JSX语法的文件顶部补上
内容的提问来源于stack exchange,提问作者SlothOnCrack
相关产品推荐
相关产品推荐

