Repository navigation
Windows Desktop 打包后启动失败:ERR_MODULE_NOT_FOUND,疑似 Electron shell runtime dependencies 不完整 #7512
Replies: 1 comment 1 reply
|
你这条我能在源码里定位到一个具体的、可核对的不一致,但它不是"少打了一个包"这么简单 —— 这个仓里同时存在两个名字相近的包,所以先别急着改名字。 1. 两个包都存在CLI 的组合表里,插件 id 而 Desktop 侧引用的是不带
2. 为什么"本地能构建、打包后起不来"打包集不是照抄 也就是说:它只从你提供的 tarball 闭包里选,并且只检查 Host 这一个包是否缺失(
请补一个数据点来确定是哪一种:你打包时传给 3. 一处值得上游看的东西
边界:读的是 |
Uh oh!
There was an error while loading. Please reload this page.
环境说明
我是在 Windows 上本地构建 Desktop。
为了避免之前遇到的 Windows 长路径问题,当前仓库放在较短路径:
当前版本:
环境大致为:
问题现象
Desktop 可以正常完成 build 和 installer 生成,但运行最终 packaged application 时启动失败。
最开始的错误是:
报错发生在最终 packaged application:
为了排除 installer 本身的问题,我也直接运行了:
结果同样报错,因此问题看起来发生在 Desktop shell packaging,而不是 NSIS 安装过程。
第一次检查:
dsh-deepseek-account检查
apps/desktop/package.json后发现:原本位于:
devDependencies但 Desktop shell 中存在实际 runtime import,例如:
最终 packaged
app.asar中也确认:不存在。
因此我做了一个临时验证,将:
从:
devDependencies移动到:
dependencies重新打包后,原来的
dsh-deepseek-account错误消失了。不过应用随后继续报:
这让我怀疑问题可能不只是单个 package 分类错误,而是 Electron shell 的 production runtime dependency 集合并不完整。
进一步检查
当前 Desktop package 实际涉及两棵不同的 dependency tree。
一棵是 Electron shell:
另一棵是自定义 dsh runtime:
在当前 build 中可以观察到:
存在。
但 Electron shell 使用的是:
Node module resolution 不会自动从:
跳到:
因此 dsh runtime 中已经存在的 package,并不能自动满足 Electron shell 自身的 runtime import。
@deepseek-ai/cordis的依赖关系进一步检查后发现:
声明了 mandatory peer dependencies,包括:
同时 Desktop shell 自身还实际运行时使用:
其中部分 package 原本位于:
devDependencies另外
dsh-app-boot也有多个 non-optional peer dependencies,例如:所以单独补一个缺失 package 可能会继续暴露下一个缺失 peer provider。
临时解决方法
为了验证是否确实是 Electron shell runtime dependency 不完整,我临时调整了:
将这些实际运行时使用的 package 放入
dependencies:并补充其当前需要的 mandatory peer providers:
修改后的
dependencies大致为:{ "electron-updater": "^6.8.9", "semver": "^7.8.5", "ws": "^8.21.0", "@deepseek-ai/dsh-api-gateway": "workspace:^", "@deepseek-ai/dsh-app-boot": "workspace:^", "@deepseek-ai/dsh-home-paths": "workspace:^", "@deepseek-ai/dsh-deepseek-account": "workspace:^", "@deepseek-ai/cordis": "workspace:^", "@deepseek-ai/cordis-plugin-group": "workspace:^", "@deepseek-ai/cordis-plugin-include": "workspace:^", "@deepseek-ai/cordis-plugin-loader": "workspace:^", "@deepseek-ai/dsh-brand": "workspace:^", "@deepseek-ai/dsh-launch-environment": "workspace:^", "@deepseek-ai/dsh-system-prompt": "workspace:^" }然后执行:
并重新运行 electron-builder。
为了缩短验证时间,我没有重新执行完整 runtime preparation,而是只重新组装 Desktop shell:
重新生成
win-unpacked后,运行:可以正常启动。
当前观察
目前看来,这个问题可能与 Desktop Electron shell 的 production dependency closure 有关。
dshruntime 本身有自己的 package preparation / dependency closure 逻辑,因此:中的依赖比较完整。
但 Electron shell:
主要依赖
apps/desktop/package.json的 production dependencies。如果 shell runtime 实际 import 的 workspace package 位于
devDependencies,或者它依赖的 mandatory peer provider 没有进入 shell 的 production dependency tree,那么最终 packaged application 可能出现:临时 workaround
目前我本地可以通过调整:
中的 runtime dependencies 和 mandatory peer providers,使最终 packaged Desktop 正常启动。
这只是为了确认问题范围的本地 workaround。
至于更合适的正式修复方式,我不确定应该是:
还是:
或者项目中已有其它预期的 packaging 机制。
这部分更适合由维护团队根据 Desktop packaging 的设计来判断。
All reactions