Skip to content

GitHub installation of dsh-toolkit meta bundle fails due to stale lockfile and missing build step #3

Description

@HHHZZZ-H

按 README「meta bundle 模型」安装 meta 包:

dsh plugin --profile web add github:omdsh-dev/dsh-toolkit

pnpm 报错:

ERR_PNPM_PREPARE_PACKAGE  Failed to prepare git-hosted package fetched from
"https://codeload.github.com/omdsh-dev/dsh-toolkit/tar.gz/5d4628929...":
@deepseek-ai/dsh-toolkit@0.0.1 npm-install: `npm install`
npm error 404 Not Found - GET
https://registry.npmjs.org/@deepseek-ai/dsh-type-meta/-/dsh-type-meta-0.0.1-rc.1.tgz

根因 1:package-lock.json 过期残留

  • 仓库提交的 package-lock.json 仍锁定 "@deepseek-ai/dsh-type-meta": "^0.0.1-rc.1"(以及 node_modules/@deepseek-ai/dsh-type-meta 条目);
  • package.json 已无此依赖(dependencies 为空,仅 TS 相关 devDependencies);
  • 公共 npm registry 上 @deepseek-ai/dsh-type-meta 包元数据与其 tarball 均 404(已实测)。

pnpm 安装 git 依赖时会按仓库 packageManager 声明在检出目录执行 npm install
(pnpm preparePackageinstallScriptName = \${pm}-install`,注入 ${pm} install`),
npm install 读取提交的过期 lockfile → 404 → prepare 失败 → 整体安装失败。

根因 2(更深):即使 lockfile 修复,git 直装仍不可用

  • 本包为纯 TS 源码("private": true),main/exports 指向 lib/index.js
  • 仓库不提交 lib/(无预构建产物),且只有 prepack 脚本(npm run build:all),
    没有 prepare 脚本——git 安装路径不会触发任何构建;
  • 结论:git 直装成功后包内也没有 lib/index.js,DSH 挂载时无法加载。

对比:子包仓库(如 dsh-tool-csv)提交了 lib/index.js 且 lockfile 干净,
dsh plugin add github:omdsh-dev/dsh-tool-csv 正常可用,与 meta 包行为不一致。

建议修复(任选)

  1. 清理仓库根 package-lock.json 中的 dsh-type-meta 残留(或删除 lockfile,本包 devDeps 自包含,无需提交 lock);
  2. 让 git 直装可构建,二选一:
    • 提交构建产物 lib/(与各子包仓库一致,最省事);或
    • 增加 "prepare": "npm run build" 并在 prepare 前确保 devDeps 已安装;
  3. 在 README「meta bundle 模型」小节补充已知限制说明,或在修复前暂时移除该命令示例。

复现证据(均不依赖任何特定本机状态)

  1. 干净环境复现:全新空项目({"name":"clean-repro","private":true})执行
    pnpm add github:omdsh-dev/dsh-toolkit → 完全相同的 ERR_PNPM_PREPARE_PACKAGE + 同一 404 + 同一 commit。
  2. 按 README 本地构建步骤复现:全新 clone(commit 5d46289,lockfile 原封不动)直接执行
    npm install(README「构建与测试」的第一步,不涉及 pnpm)→ 同样 E404
    @deepseek-ai/dsh-type-meta/-/dsh-type-meta-0.0.1-rc.1.tgz
  3. 直接 HTTP 探测:https://registry.npmjs.org/@deepseek-ai/dsh-type-meta(包元数据)
    与其 0.0.1-rc.1 tarball 均返回 404;本机 npm/pnpm 均配置为公共 registry,无作用域重定向。

临时 workaround(README 的 npm pack tarball 路径,已验证可用)

git clone https://github.com/omdsh-dev/dsh-toolkit.git
cd dsh-toolkit
rm package-lock.json        # 删除过期 lock
npm install                 # devDeps 自包含
npm run build               # 或 bash scripts/build-all.sh(Windows 上需手动逐包 tsc)
npm pack --ignore-scripts   # lib/ + 10 个子包全部入包
dsh plugin --profile web add <tarball 路径>

环境

  • OS: Windows(PowerShell 5.1 / Git Bash 可用)
  • Node: v24.14.1;pnpm: 10.9.0(dsh plugin 转发);npm: 11.x
  • DSH: @deepseek-ai/dsh(npm 安装,profile: web)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions