ben-ranford/lopper
GitHub: ben-ranford/lopper
Lopper 是一款多语言支持的依赖表面积分析 CLI/TUI 工具,通过比对依赖声明与实际使用情况,帮助团队识别浪费、削减攻击面、优化供应链安全。
Stars: 1 | Forks: 0
# Lopper
[](https://github.com/ben-ranford/lopper/actions/workflows/release.yml)
[](https://sonarcloud.io/summary/new_code?id=ben-ranford_lopper)
Lopper 是一款本地优先的 CLI/TUI 工具,用于度量源码仓库中的依赖表面积。
它会将导入的依赖项与实际使用情况进行比对,并报告浪费、风险信号及优化建议。
## 安装
macOS/Linux (Homebrew tap, 稳定版):
```
brew tap ben-ranford/tap
brew install lopper
```
macOS/Linux (Homebrew tap, 滚动更新版):
```
brew install ben-ranford/tap/lopper-rolling
```
`lopper-rolling` 跟踪 `main` 分支,并非稳定的 semver 发布版本。
Windows (GitHub Releases):
```
# 打开最新 release 页面并下载适用于您平台的 Windows asset。
gh release view --repo ben-ranford/lopper --web
```
无需本地安装直接运行:
```
docker run --rm ghcr.io/ben-ranford/lopper:latest --help
```
## 快速开始
分析单个依赖:
```
lopper analyse lodash --repo . --language js-ts
```
按浪费程度对依赖进行排名:
```
lopper analyse --top 20 --repo . --language all --format table
```
输出 JSON:
```
lopper analyse --top 20 --repo . --language all --format json
```
输出用于代码扫描的 SARIF:
```
lopper analyse --top 20 --repo . --language all --format sarif > lopper.sarif
```
启动交互式 TUI:
```
lopper tui --repo . --language all
```
调整阈值和评分权重:
```
lopper analyse --top 20 \
--repo . \
--language all \
--threshold-fail-on-increase 2 \
--threshold-low-confidence-warning 35 \
--threshold-min-usage-percent 45 \
--score-weight-usage 0.50 \
--score-weight-impact 0.30 \
--score-weight-confidence 0.20
```
保存基于 commit 键值的不可变基线快照:
```
lopper analyse --top 20 \
--repo . \
--language all \
--format json \
--baseline-store .artifacts/lopper-baselines \
--save-baseline
```
使用人类可读的标签键保存:
```
lopper analyse --top 20 \
--repo . \
--language all \
--format json \
--baseline-store .artifacts/lopper-baselines \
--save-baseline \
--baseline-label release-candidate
```
与已存储的基线键值进行比对并对 CI 进行门禁控制:
```
lopper analyse --top 20 \
--repo . \
--language all \
--format json \
--baseline-store .artifacts/lopper-baselines \
--baseline-key commit:abc123 \
--threshold-fail-on-increase 2
```
## 终端演示
| Demo | What it demonstrates | GIF preview |
| --- | --- | --- |
| 快速开始排名 | 端到端的 `--top` 工作流以及按浪费排序的依赖表,便于快速分类。 |  |
| 单依赖深入分析 | 针对单个依赖的聚焦分析,包含详细的使用信号和推荐上下文。 |  |
| CI 流程中的基线门禁 | 基线比对与增量门禁,用于在自动化检查中捕捉回归风险。 |  |
## 语言
- 支持的适配器: `js-ts`, `python`, `cpp`, `jvm`, `go`, `php`, `ruby`, `rust`, `dotnet`, `elixir`
- 适配器 ID 的真实来源: `lopper --help`
- 语言模式:
- `auto`: 选择置信度最高的适配器
- `all`: 运行所有匹配的适配器并合并结果
- ``: 强制指定一个适配器
Repo 级配置示例 (`.lopper.yml`):
```
policy:
packs:
- ./policies/org-defaults.yml
- https://example.com/lopper/policy.yml#sha256=0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef
thresholds:
fail_on_increase_percent: 2
low_confidence_warning_percent: 35
min_usage_percent_for_recommendations: 45
removal_candidate_weight_usage: 0.50
removal_candidate_weight_impact: 0.30
removal_candidate_weight_confidence: 0.20
```
阈值默认值:
- `fail_on_increase_percent: 0` (除非设置大于 `0`,否则禁用)
- `low_confidence_warning_percent: 40`
- `min_usage_percent_for_recommendations: 40`
- `removal_candidate_weight_usage: 0.50`
- `removal_candidate_weight_impact: 0.30`
- `removal_candidate_weight_confidence: 0.20`
阈值范围:
- `fail_on_increase_percent` 必须 `>= 0`
- `low_confidence_warning_percent` 必须在 `0` 到 `100` 之间
- `min_usage_percent_for_recommendations` 必须在 `0` 到 `100` 之间
- 移除候选权重必须 `>= 0` 且至少有一个大于 `0`
优先级为 `CLI > repo config > imported policy packs > defaults`。
包含严格/平衡/降噪配置文件的调优指南:
- `docs/threshold-tuning.md`
启动 TUI:
```
lopper tui --repo . --language all
```
## 运行时追踪注解 (JS/TS)
捕获运行时追踪:
```
export LOPPER_RUNTIME_TRACE=.artifacts/lopper-runtime.ndjson
export NODE_OPTIONS="--require ./scripts/runtime/require-hook.cjs --loader ./scripts/runtime/loader.mjs"
npm test
```
或者让 Lopper 运行测试命令并自动捕获追踪:
```
lopper analyse --top 20 --repo . --language js-ts --runtime-test-command "npm test"
```
在分析中使用追踪:
```
lopper analyse --top 20 --repo . --language js-ts --runtime-trace .artifacts/lopper-runtime.ndjson
```
启用运行时追踪后:
- `runtimeUsage.correlation` 将每个 JS/TS 依赖标记为 `static-only`、`runtime-only` 或 `overlap`。
- `runtimeUsage.modules` 包含运行时加载的模块路径。
- `runtimeUsage.topSymbols` 包含尽力而为的运行时符号命中。
如果 `--runtime-trace` 指向的文件丢失,分析将继续使用静态结果并添加警告。
## 开发
开发设置和命令请参阅 [CONTRIBUTING.md](CONTRIBUTING.md)。
## 文档
- 报告 Schema: `docs/report-schema.json`, `docs/report-schema.md`
- SARIF 代码扫描: `docs/sarif-code-scanning.md`
- 阈值调优: `docs/threshold-tuning.md`
- 运行时追踪注解: `scripts/runtime/`
- 适配器与架构可扩展性: `docs/extensibility.md`
- CI 与发布工作流: `docs/ci-usage.md`
- 贡献指南: `CONTRIBUTING.md`
标签:AES-256, CMS安全, DevSecOps, Docker, EVTX分析, Homebrew, JavaScript, MITM代理, SARIF, TUI, TypeScript, 上游代理, 云安全监控, 依赖浪费, 依赖管理, 安全插件, 安全防御评估, 技术债务, 攻击面分析, 文档安全, 文档结构分析, 漏洞评估, 请求拦截, 软件供应链安全, 软件开发工具包, 远程方法调用, 静态分析