You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
// asar 内 /node_modules/@deepseek-ai/dsh-api-gateway/lib/index.jsimport{Service,symbols}from"@deepseek-ai/cordis";// asar 内 /node_modules/@deepseek-ai/dsh-typert-protocol/lib/index.jsimport{Context,Service}from"@deepseek-ai/cordis";
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
Uh oh!
There was an error while loading. Please reload this page.
摘要
0.1.7-alpha.1 的 Desktop 打包产物(
package:win:x64 -- --unsigned --dir)在安装目录启动时,主进程立即抛出:根因是壳层(shell)node_modules 中打包了
dsh-api-gateway/dsh-typert-protocol,但它们的@deepseek-ai/cordis依赖以workspace:^声明在 peerDependencies/devDependencies 中,electron-builder 不会安装 peer 依赖,导致 asar 壳层缺包。cordis 实际只存在于 asar 内的/dsh/node_modules/树,壳层模块按 Node 解析规则无法到达。0.1.6-alpha.2 同路径构建可正常启动,属 0.1.7 引入的回归;现有冒烟与 CI 均不覆盖壳的 GUI 主入口,因此未被拦截。环境
c36a83ff6b(dsh / Desktop 0.1.7-alpha.1)pnpm --dir apps/desktop run package:win:x64 -- --unsigned --dirwin-unpacked复制到安装目录后双击DeepSeek Harness.exe现象
弹出 Electron 原生错误框"A JavaScript error occurred in the main process",内容为上述
ERR_MODULE_NOT_FOUND,应用无法启动。排查过程与证据
1. 排除复制问题
安装目录的
app.asar与构建产物unsigned-artifacts/win-unpacked/resources/app.asar条目数一致(均 16595 条),内容同源,排除复制损坏。2. asar 内 cordis 的位置
壳层
/node_modules/@deepseek-ai/下仅有:cosmokit、dsh-api-gateway、dsh-brand、dsh-deque、dsh-timeout、dsh-typert-protocol、schemastery。3. 报错来源文件确实静态 import cordis
4. cordis 的依赖声明位置(asar 内 dsh-api-gateway 的 package.json)
{ "dependencies": { "...": "不含 cordis" }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", "...": "..." }, "peerDependencies": { "@deepseek-ai/cordis": "workspace:^", "...": "..." } }workspace:^在仓库内由 pnpm 链接到vendor/cordis,开发态解析正常;electron-builder 收集壳层生产依赖时不包含 peer/dev 依赖,故打包后缺失。Node 从壳层模块向上解析时不会进入平级的/dsh/node_modules树,因此必然失败。5. 为什么冒烟和 CI 没有拦住
smoke-packaged-runtime以ELECTRON_RUN_AS_NODE方式启动打包产物内的 Host(模块图在/dsh/node_modules树内,cordis 就在旁边),并验证 Office 转换等能力;从未以 GUI 应用身份执行壳的主入口(lib/main.js→ 壳层依赖图)dsh-api-gateway(或 cordis 曾被包含),同路径可启动;0.1.7 的壳依赖图变化(如 "fix(desktop): move host out of CLI package")引入了这条未打包的 peer 依赖链免重打包的临时 workaround(已验证可正常启动)
Node 从 asar 内部解析失败后会回落到真实文件系统继续向上查找(asar 根 →
resources/node_modules→ 安装根node_modules→ …)。因此在安装根目录放置真实包目录即可补齐:cosmokit 与
@standard-schema/spec均无运行时依赖,三个目录放好后启动即恢复正常。解包可用@electron/asar的extractAll。修复建议
任选其一:
electron-builder.config.mjs的依赖收集/files规则中,将壳层模块图的 peerDependencies(至少@deepseek-ai/cordis)纳入壳层node_modules;或在壳依赖链的相关包中将 cordis 提升为dependenciesapps/desktop的 tsdown 构建不将 workspace 依赖标记为 external,壳主入口不依赖 asar 内散装的 workspace 包smoke-packaged-runtime中增加"以 GUI 应用身份启动打包产物、等待主窗口创建成功后退出"的检查。当前冒烟只覆盖 Host,壳主入口的任何缺包/崩溃都无法被 CI 拦截——本次回归正是由此漏过最小复现步骤
All reactions