适用场景
当你需要在上线前快速摸清一个项目的依赖许可证(License)与潜在合规风险时,这个在线工具可以把“扫描-归类-输出报告-给出处理建议”一次做完。它适用于:外包/交付验收、开源合规自查、法务/采购对接前的初筛、以及 CI 前置的人工复核。
你将得到什么
一个可部署的 Web 工具:支持上传 ZIP(前端直传/后端解压扫描)、或粘贴 package.json / requirements.txt / pom. / go.mod 等依赖清单;自动识别许可证、标记风险等级、生成可下载的 HTML/PDF/JSON 报告,并附带“如何处理”的可执行建议与检查清单。
Prompt(复制到 AI 直接生成项目)
你是一个资深全栈工程师+开源合规顾问。请为我生成一个“在线项目依赖许可证扫描与合规报告生成工具”的完整可运行项目,要求如下:
一、目标
- 用户上传一个项目压缩包(ZIP),或选择“粘贴依赖清单”模式(支持 package.json / package-lock.json / pnpm-lock.yaml / yarn.lock / requirements.txt / poetry.lock / Pipfile.lock / pom. / build.gradle / go.mod / go.sum)。
- 工具解析依赖信息,尽可能识别每个依赖的许可证(License),并输出:依赖树/清单、许可证分布统计、风险等级、疑似冲突点、以及处理建议。
二、技术栈(必须按此实现)
- 前端:React + Vite + Type + Tailwind(页面简洁,支持拖拽上传、进度条、结果筛选、导出按钮)。
- 后端:Node.js 20 + Express(或 Fastify)+ Type 。
- 解析策略:优先本地解析 lock 文件;必要时使用开源数据源的离线包/缓存(不要强依赖外网实时查询;若提供可选在线查询开关,默认关闭并清晰提示)。
- 安全:上传文件大小限制、解压防 ZipSlip、沙箱目录、超时与并发限制;所有临时文件可配置是否保留。
三、核心功能
1) 上传扫描
- 支持 ZIP 上传;后端将 ZIP 解压到临时目录,自动探测项目类型(node/python/java/go)。
- 针对不同语言:
- Node:解析 package-lock.json / pnpm-lock.yaml / yarn.lock 并生成依赖列表;
- Python:解析 requirements.txt / poetry.lock;
- Java:解析 pom. (只需读取依赖坐标与版本);
- Go:解析 go.mod/go.sum。
2) 许可证识别
- 先从本地文件中识别:扫描依赖包的 LICENSE/NOTICE/COPYING 文件、package data(package.json 的 license 字段等)。
- 统一标准化输出为 SPDX 标识(如 MIT/Apache-2.0/GPL-3.0-only/UNKNOWN)。
- 对无法识别的条目标记为 UNKNOWN,并给出“下一步如何确认”的建议。
3) 风险与建议(给出可执行规则)
- 生成风险等级:LOW/MEDIUM/HIGH;例如:GPL/AGPL 默认 HIGH(提示需法务评估),Apache-2.0 注意 NOTICE,MIT/BSD 通常 LOW。
- 识别潜在冲突:同一依赖多版本、许可证不一致、或上游声明不清。
- 输出“行动建议”清单:替换建议、保留署名/NOTICE 的要求、以及发布物中应附带的许可证文件清单。
4) 报告与导出
- 页面展示:统计卡片(总依赖数/未知数/高风险数)、可搜索表格、按风险/许可证过滤。
- 导出:
- JSON(机器可读);
- HTML(可打印);
- 可选 PDF(如果实现 PDF 需要额外依赖,请提供“可选安装”方式)。
四、交付物(必须完整输出)
- 项目文件树(tree 形式)。
- 前端全部源码、后端全部源码、配置文件、示例数据。
- 本地运行命令(开发/生产)。
- Dockerfile + docker-compose(可一键启动)。
- 部署说明:Nginx 反代示例、环境变量、存储目录、日志与清理策略。
- 测试用例或 QA checklist:覆盖上传、解析、异常输入、超大文件、UNKNOWN 处理、导出一致性。
五、约束
- 不要生成任何图片/海报/渲染图相关能力。
- 所有页面文案用中文。
- 代码要可直接复制运行;关键模块要有必要的注释;错误处理要清晰。
现在开始输出:先给文件树,再逐文件给出代码与说明。
实现要点提示
建议把“解析器”做成可插拔模块:Node/Python/Java/Go 各自一个 parser,统一输出标准字段(name、version、license、licenseEvidence、risk、notes)。这样后续扩展 Rust、PHP、.NET 也不会重写整套逻辑。
QA checklist(示例)
上传 ZIP 是否限制大小与类型;解压是否阻止路径穿越;解析失败是否给出可读错误;UNKNOWN 是否有可操作的下一步;导出的 JSON/HTML 字段是否一致;高风险依赖是否醒目标记;临时目录是否按策略清理;并发扫描是否可控。