ben-ranford/lopper

GitHub: ben-ranford/lopper

Lopper 是一款多语言支持的依赖表面积分析 CLI/TUI 工具,通过比对依赖声明与实际使用情况,帮助团队识别浪费、削减攻击面、优化供应链安全。

Stars: 1 | Forks: 0

# Lopper [![Release](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/d03c2f846d031619.svg)](https://github.com/ben-ranford/lopper/actions/workflows/release.yml) [![SonarCloud Quality Gate](https://sonarcloud.io/api/project_badges/measure?project=ben-ranford_lopper&metric=alert_status)](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` 工作流以及按浪费排序的依赖表,便于快速分类。 | ![Quick start top ranking demo](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/cf9da5c3a5031620.gif) | | 单依赖深入分析 | 针对单个依赖的聚焦分析,包含详细的使用信号和推荐上下文。 | ![Single dependency demo](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/d92b62ed3b031621.gif) | | CI 流程中的基线门禁 | 基线比对与增量门禁,用于在自动化检查中捕捉回归风险。 | ![Baseline gating demo](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/4a97486183031623.gif) | ## 语言 - 支持的适配器: `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, 上游代理, 云安全监控, 依赖浪费, 依赖管理, 安全插件, 安全防御评估, 技术债务, 攻击面分析, 文档安全, 文档结构分析, 漏洞评估, 请求拦截, 软件供应链安全, 软件开发工具包, 远程方法调用, 静态分析