前言¶
在 DSH 里做 Electron 或 Node 桌面项目时,npm run dev 能跑通,并不等于别人拿到仓库就能双击打开。常见卡点包括:国内镜像下载、Windows 260 字符路径限制、构建阶段清缓存被拦、以及打包成功但关键文件其实没进包。手写环境变量、反复试构建,既占时间也难在智能体会话里稳定复现。
下面介绍维护者 lilinshuei 发布的客户端类 DSH 插件 source-to-app。它把「预检 → 打包 → 验货」收成一套本地脚本与 Skill 能力,面向 Electron / Node 桌面项目的交付打包,并在产物侧做文件数、体积与关键文件、代码新鲜度等校验,而不只看命令退出码。
这是什么¶
source-to-app(npm 包名同名)一句话定位:把源码变成别人能双击打开的程序;自动处理镜像、长路径、缓存,并在打完包后校验产物。
| 项 | 说明 |
|---|---|
| 维护者 | lilinshuei |
| 分类 | 客户端(SkillHub 目录) |
| 许可证 | MIT |
| 运行时依赖 | 0(适配层零依赖) |
| 仓库 | GitHub: lilinshuei/source-to-app |
| 目录页 | SkillHub: source-to-app |
插件不修复业务代码错误,只处理打包链路上的环境与配置问题;所有处理在本地完成,仓库声明零遥测、不上报使用数据。
核心功能¶
资料中可核对的能力如下。
-
约 10 秒预检(preflight)
检查 Node 版本、磁盘、路径长度、镜像、包管理器、上次残留等;结果分为通过、警告、阻塞,开打前先暴露问题。 -
自动处理环境坑
针对国内镜像、长路径跳板、缓存清理被拦等场景有对应处理,减少手配环境变量。 -
一条命令编排打包
流程为预检 → 配置 → 构建 → 打包;package.mjs负责镜像、长路径、缓存与构建编排。 -
产物真校验
校验文件数、总体积、关键文件是否存在,以及app.asar内代码是否新鲜;不仅凭「命令没报错」判定成功。 -
安全与回退
需要挪走的目录进暂存区而非直接删除;安全开关限定在构建子进程内。仓库脚本约束为「只新增、不删除」,清理时会说明并留回退路径。
仓库主脚本与文档:
scripts/preflight.mjs— 开打前环境体检scripts/package.mjs— 打包编排scripts/verify-artifact.mjs— 产物校验references/pitfalls.md— 按报错症状查原因与处理
安装与启用¶
包已发布到 npm registry。在 DSH 桌面端「添加插件」时,只填包名 source-to-app,不要粘贴整条命令。桌面端把 profile 中的 web 换成 desktop;装完重启 DSH,新会话即可调用。
npm 一行安装(推荐)¶
dsh plugin --profile web add source-to-app
从 GitHub 安装¶
跟最新提交或 npm 拉取不畅时使用:
dsh plugin --profile web add github:lilinshuei/source-to-app
手动安装¶
将仓库复制到 ~/.dsh/skills/source-to-app/,最终 Skill 路径为 ~/.dsh/skills/source-to-app/SKILL.md(仓库根目录即 Skill 本体)。
注意: 插件随当前 DSH 进程权限在本地执行;安装前请自行审阅源码与 MIT 许可证,并只打包你拥有或已获授权的项目与素材。插件不提供代码签名证书,也不绕过 SmartScreen。
典型用法¶
以下命令来自仓库 README,将 <项目根>、<产物目录> 等替换为实际路径。
1. 先体检¶
node scripts/preflight.mjs --project-root <项目根>
约 10 秒内可知当前环境能否开始打包。
2. 再打包¶
node scripts/package.mjs --project-root <项目根> --desktop-dir apps/desktop --mode dir
--mode dir 适合内部测试;对外交付时再按体积决定是否制作安装程序。超过 2GB 的安装包 README 提示不建议用 NSIS,方案需自行决定。
3. 最后验货¶
node scripts/verify-artifact.mjs --artifact <产物目录> --expect resources/模型文件.bin
除退出码外,应确认关键文件与代码新鲜度;--expect 按项目替换为真实关键路径。
在 DSH 会话中,也可通过已安装的 Skill 引导智能体按上述顺序调用仓库脚本;具体触发方式以 SKILL.md 与 cordis.patch.yml 挂载声明为准。
适用场景与能力边界¶
更适合:
- Windows 优先的 Electron / Node 桌面项目交付
- 需要把仓库交给非技术人员、希望产出可双击目录或安装包的场景
- 希望在打包链路统一处理镜像、长路径、缓存,并在产物侧做结构化校验的团队
环境要求(README):
| 项 | 要求 |
|---|---|
| 运行环境 | Node.js ≥ 18 |
| 项目类型 | Electron / Node 桌面项目 |
| 操作系统 | Windows 优先;其他平台按脚本文档调整 |
| 签名证书 | 不内置;需要时自行提供 |
npm 包 package.json 中 engines.node 为 >=20,若预检报版本问题,以本地 Node 版本与预检输出为准升级。
明确不做的事:
- 不修复项目业务逻辑错误
- 不提供签名证书、不绕过 SmartScreen
- 联网仅发生在你自行执行的包管理器或下载命令中,插件本身无内置外联统计
结尾¶
source-to-app 把桌面项目从「开发机能跑」到「别人能双击用」之间的镜像、路径、缓存与漏打文件问题,收成预检、打包、验货三步;适合在 DSH 工作流里做 Electron/Node 客户端交付时使用。
- 插件目录:https://www.skillhub.cn/plugins/lilinshuei/source-to-app
- 源码与文档:https://github.com/lilinshuei/source-to-app
SkillHub 为社区插件目录站点,与 DeepSeek / 幻方无官方从属关系;DSH 生态理念是「一切皆插件」,是否安装由你自行判断风险与许可。