composer-unused是一个使用PHP开发的命令行工具,就像composer一样,只不过它的作用是扫描出代码中,加载了依赖但没有实际使用的库。
像我之前做过的一个项目,扫描结果如下图:
其中可以发现在composer.json中定义使用了许多依赖:
以下是这些库的简介:
- topthink/framework:ThinkPHP 6 框架的基础库,提供了路由、请求、响应、文件操作等基础功能。
- topthink/think-orm:ThinkPHP 6 PDO 数据库操作库,提供了基础的 CRUD(增删改查)操作和数据分页功能。
- topthink/think-captcha:验证码库,提供了多种验证码类型和配置方式。
- ext-json:PHP 内建的 JSON 扩展,提供了 JSON 数据的编码和解码功能。
- guzzlehttp/guzzle:HTTP 客户端库,提供了 HTTP 协议的请求和响应功能。
- phpoffice/phpspreadsheet:电子表格处理库,提供了 Excel、CSV 等多种格式的读写功能。
- doctrine/annotations:注解库,提供了在 PHP 代码中使用注解的功能。
- topthink/think-filesystem:文件系统库,提供了在多种存储介质(本地磁盘、云存储等)上的文件操作功能。
- overtrue/flysystem-qiniu:七牛云存储文件系统适配器库,提供了在使用七牛云存储时的文件系统操作功能。
- overtrue/flysystem-cos:腾讯云 COS 文件系统适配器库,提供了在使用腾讯云 COS 存储时的文件系统操作功能。
- iidestiny/flysystem-oss:阿里云 OSS 文件系统适配器库,提供了在使用阿里云 OSS 存储时的文件系统操作功能。
- rubix/ml:机器学习库,提供了多种机器学习算法的实现。
- phplucidframe/console-table:控制台表格库,提供了在控制台中输出表格数据的功能。
- dompdf/dompdf:PDF 文件生成库,提供了在 PHP 代码中生成 PDF 文件的功能。
同时也有几个定义了依赖但代码中并没有使用的库。
✗ topthink/think-multi-app:多应用程序支持库,允许你在一个ThinkPHP应用中创建多个独立的应用。
✗ topthink/think-view:ThinkPHP视图模板库,提供了一种方便的方式管理和渲染模板。
✗ topthink/think-migration:ThinkPHP数据库迁移库,允许你通过编程方式管理数据库迁移。
✗ jonnyw/php-phantomjs:PhantomJS的PHP封装,允许你通过PHP代码控制PhantomJS浏览器并获取其渲染结果。
✗ mnvx/lowrapper:libreoffice的命令行封装库,可以用于office文件的格式转换。
✗ mikehaertl/phpwkhtmltopdf:wkhtmltopdf编译版的PHP封装,允许你通过PHP代码将HTML转换为PDF。
其实这里是有一点小问题的,前三个关于ThinkPHP的包实际上是正在使用的,但是在我的主要代码中并没有直接引入并使用,所以被定义为未使用。这里可能是扫描机制的问题,也或许是ThinkPHP对于这几个的扩展处理的不够优雅。
在做这个项目时,我在找一个好的pdf导出方案,所以你可以看到,上面一共有4个能够实现导出pdf的库,但最终只保留了dompdf这个库。经过分析,此时可以很方便的统计出到底哪几个包没有用。
它实际上就是一个phar包,就像composer一样。但是他没有提供windows下的安装包,所以只能以最原始的配置方式:
下载phar包放到一个文件夹中,然后仿照composer的脚本新建两个脚本文件。
bat脚本
@echo OFF
:: in case DelayedExpansion is on and a path contains !
setlocal DISABLEDELAYEDEXPANSION
php "%~dp0composer-unused.phar" %*
无扩展脚本
#!/bin/sh
dir=$(cd "${0%[/\\]*}" > /dev/null; pwd)
if [ -d /proc/cygdrive ]; then
case $(which php) in
$(readlink -n /proc/cygdrive)/*)
# We are in Cygwin using Windows php, so the path must be translated
dir=$(cygpath -m "$dir");
;;
esac
fi
php "${dir}/composer-unused.phar" "$@"
最后在系统中设置环境变量就行了。
也可以使用PHIVE安装,PHP的phar管理器,以后为大家详细介绍
最简单的使用方式,就是进入项目的根目录(composer初始化的根目录),直接执行:
composer-unused
也可以添加一些参数:
composer-unused \
--excludeDir=bin \
--excludeDir=config \
--excludePackage=symfony/assets \
--excludePackage=symfony/console
比如排除某些目录或依赖。
以上就是composer-unused的基本情况,对于一些依赖很多的大型项目,还是很有用的。同样对于我这种喜欢安装测试各种依赖包来解决一些问题的人,也很有用。
原文标题:[composer-unused]扫描代码找出没有使用的依赖
原文地址:https://phpreturn.com/index/a643762d81fc54.html
原文平台:PHP武器库
版权声明:本文由phpreturn.com(PHP武器库官网)原创和首发,所有权利归phpreturn(PHP武器库)所有,本站允许任何形式的转载/引用文章,但必须同时注明出处。