Skip to content

安装后启动发生崩溃 #89

Open

Description

@El1mir

问题简述

系统:windows11
dsh安装:通过pnpm add -g @deepseek-ai/dsh安装,0.1.1-rc.2

安装 dsh-routing-suite 后 dsh web 启动发生崩溃

PS C:\Users\Administrator.dsh\profiles\web> dsh web
file:///C:/Users/Administrator/AppData/Local/pnpm/global/5/.pnpm/@deepseek-ai+dsh-app-boot@0_e13ce0a2d71be6eac59c7077b70c18f7/node_modules/@deepseek-ai/dsh-app-boot/lib/index.js:1187
throw new Error(${binName}: ${stage}: ${detail}${stack}, { cause });
^

Error: dsh: plugin tree failed to load: failed to apply loader entry include (cordis:include): failed to import loader entry dsh-super-injector (@dsh-external/dsh-super-injector): Cannot find module '../package.json'
Require stack:

  • C:\Users\Administrator.dsh\profiles\web\node_modules@dsh-external\dsh-super-injector\injector\lib\index.js
    Error: Cannot find module '../package.json'
    Require stack:
  • C:\Users\Administrator.dsh\profiles\web\node_modules@dsh-external\dsh-super-injector\injector\lib\index.js
    at Module._resolveFilename (node:internal/modules/cjs/loader:1405:15)
    at defaultResolveImpl (node:internal/modules/cjs/loader:1061:19)
    at resolveForCJSWithHooks (node:internal/modules/cjs/loader:1066:22)
    at Module._load (node:internal/modules/cjs/loader:1215:37)
    at TracingChannel.traceSync (node:diagnostics_channel:322:14)
    at wrapModuleLoad (node:internal/modules/cjs/loader:235:24)
    at Module.require (node:internal/modules/cjs/loader:1491:12)
    at require (node:internal/modules/helpers:135:16)
    at file:///C:/Users/Administrator/.dsh/profiles/web/node_modules/@dsh-external/dsh-super-injector/injector/lib/index.js:3084:51
    at ModuleJob.run (node:internal/modules/esm/module_job:303:25)
    at boot (file:///C:/Users/Administrator/AppData/Local/pnpm/global/5/.pnpm/@deepseek-ai+dsh-app-boot@0_e13ce0a2d71be6eac59c7077b70c18f7/node_modules/@deepseek-ai/dsh-app-boot/lib/index.js:1187:9)
    at process.processTicksAndRejections (node:internal/process/task_queues:105:5)
    at async runProfile (file:///C:/Users/Administrator/AppData/Local/pnpm/global/5/.pnpm/@deepseek-ai+dsh@0.1.1-rc.2_58ea75a4bf14a8e29ee6caf72d4d9144/node_modules/@deepseek-ai/dsh/lib/profile-boot-DG5t9aNs.js:247:14)
    at async file:///C:/Users/Administrator/AppData/Local/pnpm/global/5/.pnpm/@deepseek-ai+dsh@0.1.1-rc.2_58ea75a4bf14a8e29ee6caf72d4d9144/node_modules/@deepseek-ai/dsh/lib/bin.js:133:3 {
    [cause]: Error: failed to apply loader entry include (cordis:include): failed to import loader entry dsh-super-injector (@dsh-external/dsh-super-injector): Cannot find module '../package.json'
    Require stack:
    • C:\Users\Administrator.dsh\profiles\web\node_modules@dsh-external\dsh-super-injector\injector\lib\index.js
      at updateError (file:///C:/Users/Administrator/AppData/Local/pnpm/global/5/.pnpm/@deepseek-ai+cordis-plugin-_5c5aabefe36113032067cc5ad5d058bf/node_modules/@deepseek-ai/cordis-plugin-loader/lib/index.js:309:9)
      at Entry._init (file:///C:/Users/Administrator/AppData/Local/pnpm/global/5/.pnpm/@deepseek-ai+cordis-plugin-_5c5aabefe36113032067cc5ad5d058bf/node_modules/@deepseek-ai/cordis-plugin-loader/lib/index.js:529:10)
      at process.processTicksAndRejections (node:internal/process/task_queues:105:5) {
      [cause]: Error: failed to import loader entry dsh-super-injector (@dsh-external/dsh-super-injector): Cannot find module '../package.json'
      Require stack:
      • C:\Users\Administrator.dsh\profiles\web\node_modules@dsh-external\dsh-super-injector\injector\lib\index.js
        at updateError (file:///C:/Users/Administrator/AppData/Local/pnpm/global/5/.pnpm/@deepseek-ai+cordis-plugin-_5c5aabefe36113032067cc5ad5d058bf/node_modules/@deepseek-ai/cordis-plugin-loader/lib/index.js:309:9)
        at Entry._init (file:///C:/Users/Administrator/AppData/Local/pnpm/global/5/.pnpm/@deepseek-ai+cordis-plugin-_5c5aabefe36113032067cc5ad5d058bf/node_modules/@deepseek-ai/cordis-plugin-loader/lib/index.js:524:10)
        at async Entry.init (file:///C:/Users/Administrator/AppData/Local/pnpm/global/5/.pnpm/@deepseek-ai+cordis-plugin-_5c5aabefe36113032067cc5ad5d058bf/node_modules/@deepseek-ai/cordis-plugin-loader/lib/index.js:505:4)
        at async Entry.update (file:///C:/Users/Administrator/AppData/Local/pnpm/global/5/.pnpm/@deepseek-ai+cordis-plugin-_5c5aabefe36113032067cc5ad5d058bf/node_modules/@deepseek-ai/cordis-plugin-loader/lib/index.js:426:37)
        at async EntryGroup.create (file:///C:/Users/Administrator/AppData/Local/pnpm/global/5/.pnpm/@deepseek-ai+cordis-plugin-_5c5aabefe36113032067cc5ad5d058bf/node_modules/@deepseek-ai/cordis-plugin-loader/lib/index.js:65:4)
        at async Promise.allSettled (index 137)
        at async EntryGroup.update (file:///C:/Users/Administrator/AppData/Local/pnpm/global/5/.pnpm/@deepseek-ai+cordis-plugin-_5c5aabefe36113032067cc5ad5d058bf/node_modules/@deepseek-ai/cordis-plugin-loader/lib/index.js:97:21)
        at async Include._apply (file:///C:/Users/Administrator/AppData/Local/pnpm/global/5/.pnpm/@deepseek-ai+dsh-app-boot@0_e13ce0a2d71be6eac59c7077b70c18f7/node_modules/@deepseek-ai/dsh-app-boot/lib/index.js:238:3) {
        [cause]: Error: Cannot find module '../package.json'
        Require stack:
        • C:\Users\Administrator.dsh\profiles\web\node_modules@dsh-external\dsh-super-injector\injector\lib\index.js
          at Module._resolveFilename (node:internal/modules/cjs/loader:1405:15)
          at defaultResolveImpl (node:internal/modules/cjs/loader:1061:19)
          at resolveForCJSWithHooks (node:internal/modules/cjs/loader:1066:22)
          at Module._load (node:internal/modules/cjs/loader:1215:37)
          at TracingChannel.traceSync (node:diagnostics_channel:322:14)
          at wrapModuleLoad (node:internal/modules/cjs/loader:235:24)
          at Module.require (node:internal/modules/cjs/loader:1491:12)
          at require (node:internal/modules/helpers:135:16)
          at file:///C:/Users/Administrator/.dsh/profiles/web/node_modules/@dsh-external/dsh-super-injector/injector/lib/index.js:3084:51
          at ModuleJob.run (node:internal/modules/esm/module_job:303:25) {
          code: 'MODULE_NOT_FOUND',
          requireStack: [
          'C:\Users\Administrator\.dsh\profiles\web\node_modules\@dsh-external\dsh-super-injector\injector\lib\index.js'
          ]
          }
          }
          }
          }

Node.js v24.0.2

Activity

  1. YesSanSan commented on Sep 5, 2026

    @YesSanSan

    问题确认与根因排查

    我也遇到了完全相同的问题。在执行 dsh web 时,Cordis 插件加载器在导入 @dsh-external/dsh-super-injector 插件入口时崩溃,报错堆栈如下:

    Error: dsh: plugin tree failed to load: failed to apply loader entry include (cordis:include): failed to import loader entry dsh-super-injector (@dsh-external/dsh-super-injector): Cannot find module '../package.json'
    Require stack:
    - C:\Users\<Username>\.dsh\profiles\web\node_modules\@dsh-external\dsh-super-injector\injector\lib\index.js
    

    一、 错误根因分析 (Root Cause)

    1. 入口路径与相对路径偏差:

      • 本包的 package.json 声明的入口是 "main": "./injector/lib/index.js"。
      • 当插件被加载时,在 injector/lib/index.js(约第 3084 行)执行了以下代码:
        const { version } = createRequire(import.meta.url)("../package.json");
      • 此时 import.meta.url 对应目录为 <pkg-root>/injector/lib/。使用相对路径 "../package.json" 时,Node.js 向上找一层,解析到的目标是:
        <pkg-root>/injector/package.json
      • 但实际上该 npm 包的 package.json 位于仓库根目录 <pkg-root>/package.json(即相对当前文件的两级上层目录 ../../package.json),injector/ 目录下并不存在 package.json,因此直接触发 MODULE_NOT_FOUND。
    2. 为什么产物中会有这行代码:

      • 这段代码来自官方 @deepseek-ai/dsh-llm/attribution 模块(用于设置请求头中的 User-Agent 版本号)。
      • 在构建产物 injector/lib/index.js 时,打包工具(如 tsdown/esbuild)虽对未使用的函数进行了 tree-shaking,但 createRequire(...)("../package.json") 被识别为具有潜在副作用的顶层调用而残留在了产物中。
      • 并且经过分析,在整份 injector/lib/index.js 中,该处解构出来的 version 变量后续没有任何地方被引用,属于无用死代码。

    二、 用户端临时解决方案 (Workaround for Users)

    在维护者发布新版本之前,遇到此问题的用户可通过以下任一方法就地修复:

    方法 A:修改产物中的相对路径(推荐,已实测生效)

    找到文件:
    ~/.dsh/profiles/web/node_modules/@dsh-external/dsh-super-injector/injector/lib/index.js

    将约第 3084 行从:

    const { version } = createRequire(import.meta.url)("../package.json");

    改为(指向两级上层目录):

    const { version } = createRequire(import.meta.url)("../../package.json");

    (或者直接注释/删除该行也可以,因为 version 变量后续并未被使用)。

    Windows PowerShell 一键修复命令(注意使用无 BOM 保存):

    $target = "$HOME\.dsh\profiles\web\node_modules\@dsh-external\dsh-super-injector\injector\lib\index.js"
    if (Test-Path $target) {
        (Get-Content $target -Raw -Encoding utf8) -replace 'createRequire\(import\.meta\.url\)\("\.\./package\.json"\)', 'createRequire(import.meta.url)("../../package.json")' | Set-Content $target -Encoding utf8NoBOM
        Write-Host "修复完成,请重新运行 dsh web" -ForegroundColor Green
    }

    方法 B:在 injector 目录补充 package.json 软链接或副本

    在命令行中进入包目录,为 injector 目录下放一个 package.json:

    cd "$HOME\.dsh\profiles\web\node_modules\@dsh-external\dsh-super-injector"
    Copy-Item "package.json" "injector\package.json"

    三、 给仓库维护者的修复指引 (Guidance for Maintainers)

    建议维护者在源码及构建流程中从以下角度彻底修复:

    1. 消除运行时的 package.json 动态读取:

      • 运行时通过相对路径读取 package.json 极易受打包目录层级影响。
      • 建议在打包配置(如 tsdown.config.ts)中使用 define 注入版本号常量,例如:
        import pkg from './package.json' assert { type: 'json' }
        
        export default defineConfig({
          define: {
            __VERSION__: JSON.stringify(pkg.version),
          },
        })
      • 这样不仅可以彻底避免 createRequire 引起的路径解析风险,还能在构建期直接将版本号内联进代码。
    2. 清理无用的 attribution 顶层调用:

      • 检查打包配置与入口引用。如果 @deepseek-ai/dsh-llm/attribution 未被使用,应确保其不在 bundle 中残留顶层副作用语句,或通过 rollupOptions.treeshake / sideEffects: false 确保无引用的顶层 require 能够被正常剔除。
    3. 若必须保留相对路径引用:

      • 请统一源码构建输出层级与相对路径定位:
        • 若产物位于 injector/lib/index.js,相对包根目录必须向上回退两层(即 ../../package.json);
        • 或者在 files 分发列表中同时将 package.json 复制/包含至 injector/package.json。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions