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

Angular-Electron打包exe后找不到模块的路径配置求助

解决Angular-Electron构建后主进程找不到模型文件的问题

我之前在angular-electron项目里也碰到过一模一样的坑——开发时主进程能正常导入User模型,打包成exe后就弹出找不到模块的错误,给你几个亲测有效的解决办法:

1. 检查主进程的TypeScript编译配置

angular-electron模板里,主进程代码(比如你的main.ts)是单独用tsconfig.main.json编译的,默认可能没把src/app/models下的文件包含进去。你需要修改这个配置,让编译主进程时把模型文件一起转成JS:

打开tsconfig.main.json,找到include数组,添加模型文件的路径:

"include": [
  "src/main.ts",
  "src/app/models/**/*.ts"
]

这样编译后,模型文件会被生成到主进程的输出目录里,打包时就能被Electron找到。

2. 调整主进程的导入路径(适配打包后的目录结构)

开发时的相对路径./src/app/models/user.model在打包后会失效,因为主进程的JS文件可能被放到了dist/main这类子目录里,原来的相对路径指向的位置已经不对了。

你可以用Electron提供的app.getAppPath()来构建绝对路径,或者用path模块拼接正确的路径,示例如下:

import { app, BrowserWindow, screen, ipcMain } from 'electron';
import * as path from 'path';
import * as url from 'url';
import { createConnection, getConnection } from 'typeorm';

// 获取应用的根目录,再拼接打包后模型文件的路径
const userModelPath = path.join(
  app.getAppPath(),
  'dist',
  '你的项目名称', // 替换成你的Angular项目名称
  'src',
  'app',
  'models',
  'user.model'
);
const { User } = require(userModelPath);

这里用require而不是import是因为动态路径的import在TypeScript里有编译限制,如果你想继续用import,可以在tsconfig.main.json里配置baseUrl和paths来映射路径。

3. 确保模型文件被包含到Electron打包资源中

检查项目的打包配置(比如electron-builder.json或者package.json里的build字段),确认files数组包含了模型文件对应的编译后JS文件:

"build": {
  "files": [
    "dist/**/*",
    "src/app/models/**/*.js"
  ]
}

这样electron-builder打包时才会把这些文件一起打包到exe里。

4. 更清晰的方案:把TypeORM实体移到主进程专属目录

如果上面的方法还是有问题,你可以把模型文件移到主进程专属的目录(比如src/main/models),这样主进程的编译配置默认就会包含这些文件,路径问题也会少很多。修改main.ts的导入路径为./models/user.model即可。

核心原因就是开发环境下主进程能直接访问源码文件,但打包后目录结构变化,主进程的编译和打包流程没把模型文件包含进去,从编译配置入手是最直接的解决方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 09:11:25