十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

composer-dependency-analyser进阶用法:跨项目分析、多ClassLoader等特殊场景全解析

composer-dependency-analyser进阶用法:跨项目分析、多ClassLoader等特殊场景全解析 composer-dependency-analyser进阶用法跨项目分析、多ClassLoader等特殊场景全解析【免费下载链接】composer-dependency-analyser Fast detection of composer dependency issues (unused dependencies, shadow dependencies, misplaced dependencies)项目地址: https://gitcode.com/gh_mirrors/co/composer-dependency-analysercomposer-dependency-analyser 是一款零依赖、超高速的 Composer 依赖分析工具能检测未使用依赖、影子依赖shadow dependency和错放依赖。本文面向进阶场景讲解如何用一条命令完成跨项目分析以及如何正确处理多 ClassLoader、Phar 包、自定义 vendor 目录等真实项目中常见的复杂情况。为什么需要进阶用法 默认运行时工具会自动扫描当前目录下composer.json中autoload与autoload-dev声明的所有路径并分析其中的依赖使用情况约 15000 个文件仅需 2 秒。但真实工程中常常遇到要分析的代码库不在当前目录如 CI 中集中巡检多个仓库运行时存在多个 ClassLoader典型如 PHPStan 的 phar 自带 autoloadervendor 目录被vendor-dir配置改到自定义路径依赖只出现在Phar 包内部反射加载容易出错下面逐一拆解。跨项目分析用 --composer-json 指向任意代码库 最常用的一招是指定另一个代码库的 composer.json 路径vendor/bin/composer-dependency-analyser --composer-json /path/to/other-project/composer.json工具会以该 composer.json 所在目录为基准解析它的require、require-dev、autoload各段并自动读取config.vendor-dir定位 vendor 目录——这些逻辑集中在 src/ComposerJson.php 的构造函数中实现包括对psr-0/4、files、classmap及exclude-from-classmap的完整解析。 这意味着即使目标项目的 vendor 目录被配置为custom-vendor/分析依然能正确工作无需任何额外参数。多 ClassLoader 场景PHPStan 这类工具的正确姿势 ⚡当进程里注册了多个 autoloader 时例如运行过PharAutoloader::loadClass(_PHPStan_)Composer 的ClassLoader::getRegisteredLoaders()会返回多个 vendor 目录。工具会把每个已注册的 ClassLoader 都纳入分析$vendorDirs即取自所有 loader 的键见 src/Analyser.php$this-vendorDirs array_keys($classLoaders [$defaultVendorDir null]);典型效果PHPStan 规则文件里用到的PhpParser\Node实际由 PHPStan phar 内部的 vendor 提供工具能识别出它存在于 PHPStan 的 vendor 中因此不会误报为影子依赖。对应的完整测试见 tests/AnalyserTest.php 中的testMultipleClassloaders示例数据在 tests/data/not-autoloaded/multiple-classloaders/phpstan-rule.php。Phar 包内部类的使用检测 依赖被打包进.phar时工具同样支持分析其内部类的使用情况。测试代码会现场构建一个包含Phar\Inner类的 phar 并验证检测结果testPharDependency数据文件位于 tests/data/not-autoloaded/phar/phar-usage.php。反射报错也不崩溃缺失父类的边界场景 ️如果被使用的类可被 autoload但其父类缺失Reflection 会抛出普通Error而非ReflectionException。工具已妥善处理这类崩溃分析不会中断而是将该类报告为Unknown\Clazz未知类错误相关实现与测试testReflectionOfClassWithMissingParentDoesNotCrash可参考 tests/data/not-autoloaded/reflection-error/usage.php。特殊 autoload 配置的解析能力 对于带通配符与绝对路径混用的复杂 autoload 配置例如 tests/data/not-autoloaded/composer/sample.json 中的classmap: [dir*, /absolute/dir]及多级exclude-from-classmap工具都能正确展开并用于扫描路径计算配合--composer-json即可分析任意结构的代码库。总结与建议 ✅场景解决方案分析其他目录的代码库--composer-json指定目标 composer.json进程内多个 ClassLoader自动识别所有已注册 loader无需配置自定义 vendor 目录自动读取config.vendor-dirPhar 内部类 / 反射异常均已内置边界处理 进阶建议结合--config精细控制扫描路径与忽略规则完整配置项见 src/Config/Configuration.php并优先让运行时的 PHP 扩展是被分析项目的超集以获得精确的ext-*分析结果。【免费下载链接】composer-dependency-analyser Fast detection of composer dependency issues (unused dependencies, shadow dependencies, misplaced dependencies)项目地址: https://gitcode.com/gh_mirrors/co/composer-dependency-analyser创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表