[composer-unused]扫描代码找出没有使用的依赖

news2024/10/4 23:33:50

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武器库)所有,本站允许任何形式的转载/引用文章,但必须同时注明出处。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/421669.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【网络】网络层协议——IP

目录网络层IP协议IP基础知识IP地址IP报头格式网段划分CIDR特殊的IP地址IP地址的数量限制私有IP地址和公有IP地址路由IP总结网络层 在复杂的网络环境中确定一个合法的路径。 IP协议 IP协议作为整个TCP/IP中至关重要的协议,主要负责将数据包发送给最终的目标计算机…

对USB协议的通俗理解

目录简介背景特点版本USB数据流模型总线拓扑结构USB通信流端点管道电气标准USB接口类型USB Type-AUSB Type-BUSB Type-CPIN脚定义4PIN9PIN5PIN24PIN16PIN6PINUSB数据传输相关概念通讯方式通讯方向同步方式帧和微帧USB数据格式域包令牌包数据包握手包特殊包事务IN事务OUT事务SET…

BM37-二叉搜索树的最近公共祖先

题目 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 对于该题的最近的公共祖先定义:对于有根树T的两个节点p、q,最近公共祖先LCA(T,p,q)表示一个节点x,满足x是p和q的祖先且x的深度尽可能大。在这里,一个节点也可以是它自己…

CSC国家公派项目网上申报今天启动/附应提交材料及说明

今天(4月10日)是2023年国家公派高级研究学者、访问学者、博士后项目开始申报的日期,知识人网小编提醒申请者关注,同时附上该项目的应提交材料及说明。 根据国家留学基金委(CSC)通知精神,2023年国…

typora和C51开发环境

经过查阅,可以用wiz和typora联动的方式记录笔记,这样一个文件夹里既可以用typora也可以用内置编辑器(一种富文本编辑器),注意同一个文件不能用不同的编辑器,否则会错乱。以下,我列举了用typora的…

extern 关键字

参考https://www.cnblogs.com/yc_sunniwell/archive/2010/07/14/1777431.html 1 基本解释 extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。此外extern也可用来进行链接指定…

k8s调度器扩展(Scheduler Framework)、源码编译及部署

因为研究的需要,需要对K8S的调度器进行扩展,本文主要讲解了k8s调度器扩展的一个流程,其中包含源码修改、源码编译、调度器配置以及部署和本人所踩的一些坑,使用的k8s的版本为1.23.1 1.下载源码,在此选择v1.23.1版本&a…

大数据之Spark部署模式

文章目录前言一、Spark的部署模式(一)Client模式1. Standalone集群下的Client模式2. Spark On Yarn集群下的Client模式(二)Cluster模式1. Standalone集群下的Cluster模式2. Spark On Yarn集群下的Cluster模式总结前言 #博学谷IT学…

c++头文件、namespace 的理解、#include、 编译模式

namespace C 命名空间 | 菜鸟教程 C命名空间(名字空间)详解 作用:多写在头文件中,用于多个头文件的变量函数出现重命名。 namespace中可以定义变量,函数,类等等,也可以写声明,来…

牛客网 HJ28 素数伴侣【二分图匹配,匈牙利算法】困难

描述 若两个正整数的和为素数,则这两个正整数称之为“素数伴侣”,如2和5、6和13,它们能应用于通信加密。现在密码学会请你设计一个程序,从已有的 N ( N 为偶数)个正整数中挑选出若干对组成“素数伴侣”&am…

一种用于水位量测的浮子水位计

简介 浮子式水位传感器(带水位显示)是集机、电技术于一体的数字化传感器。通过输出轴的角度位移量转换成相应的数字量,可以高精度测量被测液位高度,能确认准确位置。具有断电记忆功能。 其工作原理就是:水位传感器测轮…

二叉搜索树(BSTree)

目录 一、二叉搜索树 二、二叉搜索树的接口及实现 1、二叉搜索树的查找 2、二叉搜索树的插入 3、二叉搜索树的删除 三、二叉搜索树的递归版本 本期博客主要分享二叉搜索树的底层实现。(主要是笔记,供自己复习使用😂) 一、二叉搜索树 二叉搜索树(B…

Github创建组织(organization)

目录 前言 Github上创建组织的详细步骤 前言 创建 Github 组织(Organization)可以让你和你的团队共享代码,更好地管理和协作开发项目。Github 组织(Organization)是一个非常有用的工具,可以让开发者协同…

stm32cubemx IAP升级(一)

stm32cubemx IAP升级- Bootloader的制作 板卡:Nucleo-L412 平台:macbook pro 工具:vscode stm32cubemx stm32cubeProgramer cmake toolchain 分区 L412 自带128K的flash,所以我们可以这样分区, printf(“| flash pr…

crypto-js AES-CTR 实现密文前缀式局部解密细节 踩坑点

项目有需求,长明文经过AES-CTR模式加密后,在解密的时候,密文不能直接得到,每次通过某些方法尝试后,只能得到一块密文(按顺序),所以只能一块一块的拼接解密。在使用crypto-js这个库的…

WooCommerce可扩展性:如何扩大您的WooCommerce商店

有了合适的人和技术,WooCommerce可扩展性绝对是很大的! 事实上,使用WooCommerce作为您的电子商务平台,您的在线商店的规模可以与您的目标和愿望一样大! 根据自定义模板开发高性能品牌电子商务网站 全球超500万个电商…

高效办公——Excel表格-02篇(if函数常见用法 + 条件格式的使用)

高效办公——Excel表格-02篇(if函数常见用法 条件格式的使用)1. if单条件简单用法1.1 简单需求1.2 实现方法2. if多条件使用(if-else的情况)3. if多条件使用(if(A && B)的情况)3.1 简单需求3.2 实现需求4. if多条件使用(if(A || B)的情况)5. 条…

亚马逊云科技“三步走”,实现区块链应用的快速开发

作为数字技术的代表之一,区块链技术正在被越来越多的企业所重视,并被引入到各行业的数字化转型中。根据中国通信院数据显示,目前中国区块链应用场景主要以金融和互联网为主,但应用范围呈现不断拓展的态势,政务数据共享…

day10_oop

今日内容 零、 复习昨日 一、面向对象的概念 二、面向对象编程 三、内存图 零、 复习昨日 晨考复习… 一、作业 package com.qf.homework;import java.util.Arrays;/*** --- 天道酬勤 ---** author QiuShiju* desc* ----------------* 引用数据类型的默认初始值null*/ public …

Nginx 正向代理、方向代理、端口转发

正向代理就是客户端代理,代理客户端,服务端不知道实际发起请求的客户端 正向代理中,proxy和client一般同一个lan或者网络可达,server与client一般不可达(缓存场景除外) 正向代理类似一个跳板机&#xff0c…