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

升级NodeJS至18 LTS后React项目出现TS2307模块找不到错误求助

问题描述

将Ubuntu 22默认的NodeJS v12.22.9(配套npm 6.14.15)升级至v18.12.0 LTS(配套npm 8.19.2)后,打开VSCode发现React项目(使用React+JS)中所有组件的各类导入均出现警告:例如图片、SVG、CSS模块导入时提示Cannot find module 'xxx' or its corresponding type declarations.ts(2307)。

相关配置文件如下:

jsconfig.json

{
  "compilerOptions": {
    "checkJs": true,
    "jsx": "react-jsx",
    "baseUrl": "src"
  },
  "include": ["src"],
  "exclude": ["node_modules", "build"]
}

package.json 依赖部分

"dependencies": {
  "@ant-design/icons": "^4.7.0",
  "@reduxjs/toolkit": "^1.8.6",
  "antd": "^4.23.3",
  "less": "^4.1.3",
  "react": "^18.1.0",
  "react-dom": "^18.2.0",
  "react-redux": "^8.0.4",
  "react-router-dom": "^6.4.2",
  "react-scripts": "5.0.1",
  "web-vitals": "^3.0.3"
}

/node_modules/react-scripts/lib/react-app.d.ts

/// <reference types="node" />
/// <reference types="react" />
/// <reference types="react-dom" />

declare namespace NodeJS {
  interface ProcessEnv {
    readonly NODE_ENV: 'development' | 'production' | 'test';
    readonly PUBLIC_URL: string;
  }
}

declare module '*.avif' {
  const src: string;
  export default src;
}

declare module '*.bmp' {
  const src: string;
  export default src;
}

declare module '*.gif' {
  const src: string;
  export default src;
}

declare module '*.jpg' {
  const src: string;
  export default src;
}

declare module '*.jpeg' {
  const src: string;
  export default src;
}

declare module '*.png' {
  const src: string;
  export default src;
}

declare module '*.webp' {
    const src: string;
    export default src;
}

declare module '*.svg' {
  import * as React from 'react';

  export const ReactComponent: React.FunctionComponent<React.SVGProps<
    SVGSVGElement
  > & { title?: string }>;

  const src: string;
  export default src;
}

declare module '*.module.css' {
  const classes: { readonly [key: string]: string };
  export default classes;
}

declare module '*.module.scss' {
  const classes: { readonly [key: string]: string };
  export default classes;
}

declare module '*.module.sass' {
  const classes: { readonly [key: string]: string };
  export default classes;
}
问题原因
  • Node.js版本从v12升级到v18后,VSCode的TypeScript语言服务未自动适配新的Node环境,无法正确识别/node_modules/react-scripts/lib/react-app.d.ts中的类型声明。该文件定义了图片、SVG、CSS模块等非JS模块的类型,语言服务找不到它就会抛出模块缺失警告。
  • 项目开启了jsconfig.json中的"checkJs": true,强制TypeScript对JS文件做类型校验。一旦语言服务无法加载必要的类型声明,就会触发这类找不到模块的错误。
  • npm从v6升级到v8后,依赖安装的缓存机制或node_modules目录结构发生变化,导致VSCode的类型索引功能无法正确定位到react-app.d.ts文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 14:40:33