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

Electron+TS项目编译报错:TypeScript无法找到已安装的模块

问题根因

编译报模块找不到是三个配置问题导致的:

  1. tsconfig.json中types字段配置错误:该字段是类型加载白名单,你仅配置了"node",等于告知TypeScript编译器只加载@types/node的类型定义,electron、axios等其余依赖的类型包全部被忽略,编译器找不到对应模块的类型声明就会抛出模块不存在的错误。另外你安装的@types/electron是早已废弃的旧版本第三方类型包,新版Electron已经内置完整类型定义,这个包会造成类型版本冲突。
  2. 未区分Electron双进程的编译规则:Electron主进程运行在Node.js环境,原生支持CommonJS规范;渲染进程运行在Chromium环境,对ES Module的支持逻辑和Node完全不同。你用同一套配置编译所有代码,要么主进程ES模块解析失败,要么渲染进程碰到不识别的require语法,本质是架构配置混淆。
  3. 缺失模块解析配置:你没有配置moduleResolution: "Node",TypeScript不会按Node.js的模块查找规则去node_modules目录定位依赖,额外加的paths映射规则反而会干扰正常解析。
修复步骤
  • 清理冲突依赖
    执行命令卸载废弃的类型包,避免版本冲突:
    npm uninstall @types/electron
    
  • 修正主进程TS配置
    主进程单独使用一套tsconfig(例如命名为tsconfig.main.json),直接用下面的配置即可,不要给主进程代码配置ES2015模块规范:
    {
      "compilerOptions": {
        "target": "ES2020",
        "module": "CommonJS",
        "noImplicitAny": true,
        "sourceMap": true,
        "outDir": "dist/main",
        "baseUrl": ".",
        "allowSyntheticDefaultImports": true,
        "esModuleInterop": true,
        "moduleResolution": "Node",
        "skipLibCheck": true
      },
      "include": [
        "src/main/**/*"
      ]
    }
    
    配置说明:删掉原来多余的paths映射和限制过严的types字段,开启Node模块解析规则,TS会自动扫描node_modules下的依赖和对应类型定义,不会再出现找不到模块的问题。主进程编译出来的CommonJS代码可以直接被Electron加载,不存在语法兼容问题。
  • 单独配置渲染进程编译
    把所有跑在页面里的渲染进程代码(包含request.ts这类前端请求逻辑)从主进程的编译include里剔除,单独配置:
    • 不想引入打包工具的话,新建tsconfig.renderer.json,把module设为ESNext,moduleResolution设为Bundler,编译后的js文件在HTML中引入时加上type="module"属性即可。
    • 更推荐用Vite/Rollup这类轻量打包工具处理渲染进程代码,自动处理模块路径、语法兼容问题,不用手动折腾ES模块和CommonJS的适配。
  • 调整构建脚本
    把package.json里的build脚本改成分别编译主进程和渲染进程,例如:
    "scripts": {
      "build:main": "tsc -p tsconfig.main.json",
      "build:renderer": "vite build",
      "build": "npm run build:main && npm run build:renderer",
      "start": "npm run build && electron --no-sandbox ./dist/main/main.js"
    }
    
    不使用打包工具的话,把build:renderer换成对应渲染进程的tsc编译命令即可。
之前尝试的方案为什么无效
  • 把module改成commonjs后项目能跑但前端报错:本质是没拆分双进程配置,把渲染进程代码也编译成了CommonJS格式,浏览器环境不认识require语法自然报错,不是CommonJS本身的问题。
  • 用tspath工具处理路径无效:你的问题和路径别名没有关系,这个工具本身对Windows的适配存在大量兼容问题,完全没必要使用。
  • 改相对路径导入报类型声明缺失:就是因为最开始types白名单屏蔽了其他类型包,不管路径怎么写,TS都找不到对应类型定义,必然报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 20:42:17