能,但只反映本地已安装包结构,与Satis镜像无关;它不查远程源,仅解析vendor/composer/installed.json生成依赖树。

composer show --tree 在 Satis 镜像下能用吗
能,但只反映本地 composer.json 和已安装的包,和你搭的 Satis 镜像无关。composer show --tree 不查任何远程源,它只是解析当前 vendor/composer/installed.json 生成树状结构。哪怕你把 repositories 全删了、断网、Satis 服务宕机,这个命令照样跑得飞快。
常见误解是:配好 Satis 后运行 composer show --tree 就能看到镜像里所有可选包——不会。它只显示“已经装进来的”,不是“镜像里有哪些”。想确认 Satis 是否真包含某个包,得去浏览器打开 https://pkgs.internal.example.com/packages.json 手动搜索,或用 curl -s https://pkgs.internal.example.com/packages.json | jq '.packages["acme/utils"]' 查。
composer-dependency-graph 为什么拉不到私有包
因为默认不读取项目 composer.json 里的 repositories 配置,它只走 Composer 的“默认行为”——也就是只连 packagist.org。即使你项目里写了 Satis 地址,./vendor/bin/composer-dependency-graph 也不会自动继承。
必须显式传入 --repository 参数,且 URL 必须和 composer.json 中一致(结尾斜杠不能少):
./vendor/bin/composer-dependency-graph \ --repository https://pkgs.internal.example.com/ \ --output-dir ./graph
- 如果 Satis 启用了 Basic Auth,
auth.json必须存在且权限为600,否则认证失败静默跳过 - 该工具不会下载 dist 包,也不校验版本约束,只抓元数据;若 Satis 的
packages.json里没收录某包(比如漏在require外),图里就压根不会出现 - 不支持多个
--repository,遇到混合源(Satis + GitHub Packages)得先合并成一个聚合镜像,再喂给它
phpdg 生成的图为什么缺失 dev 分支依赖
phpdg 是静态代码分析工具,它扫描的是 vendor/ 下已解压的 PHP 文件,而不是 Composer 的仓库元数据。所以它根本不知道你 satis.json 里写了 "require-all": true,也不知道 dev-main 是个合法版本。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
它只认一件事:当前 vendor/ 目录里实际存在的类和 use 语句。因此:
- 如果你没
composer install --no-dev,dev包可能被装进来了,phpdg就能画出来 - 但如果你只跑了
satis build并部署了镜像,却没在项目中require那个dev包,phpdg就完全看不见它 - 它对
composer.json的require-dev字段也无感——那是 Composer 安装时的事,不是代码引用的事
离线环境怎么验证依赖图工具是否可用
核心原则:图工具本身可以离线跑,但它的输入数据(包元数据或源码)必须提前准备好。没有网络 ≠ 没有数据。
实操分两步:
- 在可联网机器上,用
composer install --prefer-dist --no-scripts把所有依赖下全,确保vendor/目录完整。再执行./vendor/bin/composer-dependency-graph --repository https://pkgs.internal.example.com/ --output-dir ./graph生成 HTML 图,把整个graph/目录打包带走 - 离线机器上,只需 PHP CLI 和浏览器。打开
graph/index.html即可交互查看——它不发任何网络请求,所有数据已内联或本地引用 - 别指望
phpdg在离线机上重新分析:它需要vendor/和全部源码,而源码里若有git clone或file_get_contents远程地址,静态分析会直接报错中断
真正容易被忽略的是时间戳同步问题:Satis 构建时生成的 packages.json 里每个包都有 time 字段,composer-dependency-graph 会把它渲染成节点标签。如果构建机和离线机系统时间差超过 1 小时,某些前端 JS 可能因 CORS 或证书时间校验异常而加载失败——不是功能问题,是浏览器拦的。

















