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

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报错
  • react/react-in-jsx-scope报错的补充处理
    如果做完上面两步还是存在这个报错,二选一处理就行:
    • 所有写了JSX语法的文件顶部补上import React from 'react'导入语句,这是React 17之前版本的强制语法要求
    • 如果你用的是React 17及以上版本,直接在项目ESLint配置里关闭react/react-in-jsx-scope规则即可,React 17之后的新版JSX转换已经不需要在每个文件里手动导入React。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 08:39:14