Deptrac 需要 Composer 支持是因为它依赖 composer.json 中的 autoload 配置来解析类的命名空间与路径映射,若 vendor/autoload.php 不存在或 autoload 配置无效,会导致 Class not found 或依赖解析失败。

Deptrac 为什么需要 Composer 支持
Deptrac 本身是 PHP 架构分析工具,不依赖 Composer 运行,但实际项目中几乎必须通过 Composer 安装和加载。关键在于:deptrac 命令行工具需要正确识别项目中的类自动加载规则(即 autoload 和 autoload-dev 配置),而这些信息全部来自 composer.json。如果 Deptrac 无法读取或解析 autoload 配置,就会报错 Class not found 或直接跳过大量文件。
- Deptrac 默认会尝试读取当前目录下的
composer.json,并调用 Composer 的 autoloader 机制来定位类 - 若项目使用 PSR-4、PSR-0、classmap 或 files 类型的 autoload,Deptrac 均能识别,但要求路径配置真实存在且可访问
- 如果
composer.json中的autoload指向了未生成的vendor/autoload.php(比如还没运行composer install),Deptrac 会静默失败或报Cannot open vendor/autoload.php
如何让 Deptrac 正确加载你的类
Deptrac 不会自动执行 composer dump-autoload,它只读取配置并尝试 require 对应的 autoload 文件。因此必须确保:
-
vendor/autoload.php已存在(即已运行过composer install或composer dump-autoload) -
composer.json中的autoload路径是相对项目根目录的,且不包含通配符或动态变量(Deptrac 不解析 PHP 代码,只做静态 JSON 解析) - 若使用
autoload-dev(如测试类),需在 Deptrac 配置中显式启用:设置include_dev_dependencies: true,否则tests/下的类不会被扫描
示例常见错误配置:
"autoload": {
"psr-4": {
"App\": "src/"
}
}
✅ 正确:Deptrac 能识别 src/ 下所有 App 命名空间类
❌ 错误:"App\": "src//"(末尾双斜杠)或 "App\": "${SRC_DIR}/"(环境变量)——Deptrac 解析失败,类无法加载
Deptrac 扫描范围与 Composer autoloader 的关系
Deptrac 的 paths 配置(在 deptrac.yaml 中)决定扫描哪些目录,但它不替代 autoload 配置。二者分工明确:
-
paths:告诉 Deptrac “去哪些文件夹里找 PHP 文件” -
autoload(来自 composer.json):告诉 Deptrac “这些 PHP 文件里定义的类,其命名空间和路径映射关系是什么”
这意味着:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 即使某个目录在
paths中,但如果它的命名空间没在composer.json的autoload里声明,Deptrac 仍可能无法解析该目录下类的依赖(尤其涉及new Xyz()或use语句时) - 反之,若一个类在
autoload中注册了,但所在目录不在paths列表里,Deptrac 根本不会读取那个文件,也就不会检查它的层间调用
典型场景:你把领域模型放在 domain/,但 composer.json 没配 "Domain": "domain/",Deptrac 就无法将 new User() 关联到 DomainUser,导致“未知类”警告或规则漏检。
CI 环境中容易忽略的 Composer 相关陷阱
在 GitHub Actions、GitLab CI 等环境中,Deptrac 往往因 Composer 状态不一致而失败:
-
composer install --no-dev后,vendor/autoload.php不包含autoload-dev部分 → Deptrac 扫不到tests/,但你的规则可能依赖测试层声明(如TestLayer) - 使用
composer install --prefer-dist通常没问题,但若项目含 path repository(本地包),必须加--prefer-source,否则 Deptrac 扫描不到 symlink 目录里的源码 - 多阶段 Docker 构建中,
deptrac运行在不含composer命令的轻量镜像里 → 不能指望它现场生成 autoload,必须提前把vendor/和完整 autoload 文件打进镜像
最稳妥的做法:CI 中统一执行 composer install --no-interaction --optimize-autoloader,再运行 deptrac;不要跳过 vendor/ 目录,也不要试图用 --no-autoloader 参数绕过。
Deptrac 对 autoload 的依赖是隐式的,但非常刚性。一旦类加载链断掉,它不会报清晰错误,而是静默降级为字符串匹配,结果不可信。

















