dsh-license-guard:依赖树与项目自身的开源许可合规检查

前言

用 DSH 做应用或插件时,依赖往往一层套一层。发版、对外开源或接受客户审计前,如果只凭肉眼扫 package.json,很容易漏掉 GPL/AGPL 这类强传染许可,或项目根目录、清单里根本没有可识别的许可证信息。事后被追问「为什么用了 GPL 却没按义务开源」,风险从「分发」那一刻就已经存在。

下面介绍维护者 feely0208 的 DSH 插件 dsh-license-guard(npm 包名 @deepwhale-cn/dsh-license-guard,分类 admin-security)。它在当前工程目录扫描依赖树,并按固定规则标出许可相关风险;也可不装 DSH,单独用 CLI 跑一遍。检查通常只需几秒,退出码可用于 CI。

这是什么

dsh-license-guard 做的是开源许可与许可证合规检查:扫描依赖树,找出 GPL/AGPL 传染、许可未知、缺 LICENSE 等风险,适合发布前、开源前、被审计时跑一遍。

与「只列依赖许可证」的工具不同,README 明确说明它不只看依赖,也会看项目自身——例如仓库缺 LICENSE、package.json 缺 license 字段,这两类问题会让下游无法判断能否合法使用你的代码。

插件归属 GitHub 仓库 feely0208/dsh-license-guard,在 DSH 社区目录(如 skillhub.cn 插件页)可查到条目;DSH 生态理念是「一切皆插件」,社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系。

它查什么

README 用级别表格归纳检查重点(工具内部共 5 条规则,覆盖依赖树许可风险与项目基础文件):

级别 内容
高 GPL / AGPL —— 强传染
中 许可未知(没写许可证 ≠ 随便用)· 项目缺 LICENSE
低 LGPL / MPL / EPL · package.json 缺 license 字段

不覆盖:专利条款、商标、出口管制、SSPL/BUSL 等非 SPDX 自定义协议。依赖声明里的许可证字段可能不准(维护者写错),本工具不校验其真实性。

README 用典型场景说明「不装它会怎样」:产物里混入未发现 GPL 依赖并对外分发后,GPL 义务从分发时即可能触发;跑一次检查成本很低,与事后审计代价形成对比。此处为 README 中的说明性场景,非第三方实测数据。

安装与启用

在 DSH 环境中安装(命令来自官方 README):

# DSH 插件(推荐)
dsh plugin --profile web add @deepwhale-cn/dsh-license-guard

不依赖 DSH 时,可用 npm 一次性执行(同样来自 README):

npx @deepwhale-cn/dsh-license-guard

package.json 中要求 Node >=18,DSH 引擎 >=0.1.0-rc.6。插件以当前 dsh 进程权限 读取目录与依赖信息;安装或使用前,应自行查看仓库源码与 MIT 许可证声明,并对合规结论负责。README 边界声明:使用者须遵守所在地区法律法规,对使用本项目造成的后果自行承担责任。

典型用法

在项目根目录执行以下命令(均来自 README):

dsh-license-guard                # 扫当前目录
dsh-license-guard --demo         # 用内置样本看效果
dsh-license-guard --html r.html  # 输出 HTML 报告

无参数扫描适合日常发版前自检;--demo 便于在未接入真实仓库时确认输出格式;--html 生成可归档或附在审计材料中的 HTML 报告。README 说明退出码可挂 CI,具体流水线写法需按你方 CI 对非零退出码的策略配置。

报告示例与规则说明图见 README 中的链接(deepwhale.org.cn 插件资源路径)。

适用场景与注意

适合谁:维护 Node/前端或 DSH 插件仓库、需要在发版/开源/审计前快速扫一遍许可风险的开发者;与深鲸网安守护系列里「供应链与构建」方向的 依赖投毒、物料清单 等插件配套时,README 将其定位为「一个插件做一件事」,安全问题链式出现时可组合使用。

务必知晓:

  1. 工具给出的是基于声明与项目文件的规则化提示,不能替代法务意见。
  2. 不覆盖 SSPL/BUSL 等自定义协议及专利、商标等维度。
  3. 依赖树中的 license 字段未被工具验证真伪。

结尾

dsh-license-guard 把「依赖传染许可」和「项目自身缺许可信息」放在同一次扫描里,用短命令和可接 CI 的退出码,把发版前、开源前、被审计前的许可自检做成固定步骤。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜