Depcheck——专门用于检测 JavaScript 和 Node.js 项目中未使用依赖项的工具
文章目录
- Depcheck 是什麽
- 核心功能
- 📚检测未使用的依赖
- 🐛检测缺失的依赖
- ✨支持多种文件类型
- 🌍可扩展性
- 安装与使用
- 1. 安装 Depcheck
- 2. 使用 Depcheck
- Depcheck 的应用
- 总结
- 项目源码:
Depcheck 是什麽
来看一个常见错误场景🚨:同一个项目,开发者A持续开发并且稳定运行,但是开发者B拉取代码安装依赖却运行失败,除去 Node 等版本错误原因,最大的原因就是:A的本地node_modules文件夹中下载了某个依赖,但是package.json文件中并没有记录该依赖,导致其他开发者无法正常运行项目…
Depcheck 是一个开源的命令行工具,专门用于检测 JavaScript 和 Node.js 项目中的未使用的依赖项。它可以帮助开发者快速识别出项目中哪些依赖包没有被实际使用,或者是哪些未在 package.json 中声明但已经被项目使用的包。
对于开发者而言,Depcheck 是保持项目简洁和高效的必备工具,尤其是在复杂项目或长期维护的代码库中,它能显著减少冗余代码,提高依赖管理的质量。
核心功能
📚检测未使用的依赖
Depcheck 的核心功能是扫描项目中的所有代码,分析哪些依赖被引用了,哪些没有。未使用的依赖项会被标记为 “unused dependencies”,提醒开发者可以安全地移除这些依赖,减小项目体积,减少安全风险。
🐛检测缺失的依赖
除了查找未使用的依赖外,Depcheck 还能帮助检测项目中已经在代码中引用了,但却没有在 package.json 文件中声明的依赖项。这些缺失的依赖(missing dependencies)可能会导致项目在某些环境中无法正确构建或运行。
✨支持多种文件类型
Depcheck 支持多种文件类型和语法,包括 JavaScript、TypeScript、Babel、React JSX 等现代前端技术栈。这意味着它不仅适用于 Node.js 后端项目,也适合前端项目。
🌍可扩展性
Depcheck 允许开发者通过配置文件自定义检查规则,或忽略某些特定的文件或依赖。对于某些动态加载的模块,开发者可以通过 ignore 选项灵活调整工具的行为。
安装与使用
使用前提:
node.js版本 >= 10
1. 安装 Depcheck
Depcheck 是一个 npm 包,可以通过以下命令全局或本地安装:
2. 使用 Depcheck
在项目根目录运行以下命令:
depcheck
如果你是局部安装的话就使用npx命令:
npx depcheck
Depcheck 将扫描项目并返回检测结果,结果通常会分为三类⭐:
• 没有未使用的依赖项(Unused dependencies):项目中的 package.json 文件所声明的依赖项都被代码实际使用了。
• 没有缺失的依赖项(Missing dependencies):所有代码中引用的依赖项都在 package.json 中声明了。
• 没有未使用的开发依赖项(Unused devDependencies):开发依赖项也没有冗余,都是有效的。
示例输出:
情况一:
No depcheck issue
这个提示表明你的项目的依赖管理良好,所有依赖项都被合理使用且声明正确,项目依赖关系清晰,无需进一步操作。是一个积极信号✅。
情况二:
Unused dependencies
* element-plus
这表示项目中安装了element-plus,但是没有在代码中使用,是多余的依赖❌。
Missing dependencies和Unused devDependencies现实情况和上面一样。
还可以在项目文件夹下创建一个.depcheckrc文件,用来配置更多的项目选项。
ignores: ["eslint", "babel-*"]
skip-missing: true
Depcheck 的应用
-
代码库优化 随着项目的增长,某些依赖项可能在开发过程中被添加,但后来不再需要。Depcheck 可以帮助识别这些无用的依赖,减少项目的复杂度,提高构建性能。
-
项目迁移或升级 在迁移或升级技术栈时,Depcheck 可以用于检测哪些依赖项已经不再兼容或不需要。尤其是在从老旧版本向现代框架迁移时,依赖项的清理变得非常重要。
-
依赖管理中的安全性 未使用的依赖项可能带来潜在的安全风险,因为它们可能包含已知漏洞,但实际上并未在项目中使用。移除这些依赖项可以降低项目暴露的攻击面。
总结
Depcheck 是一个强大且简单易用的工具,适合所有 JavaScript 和 Node.js 项目的开发者使用。它通过自动化的方式帮助开发者保持项目依赖的清洁和安全,减少技术债务,同时提升项目的可维护性。通过定期使用 Depcheck,开发者可以确保项目中只包含必要的依赖,从而提高项目的性能和安全性。
项目源码:
https://github.com/depcheck/depcheck
相关文章:

Depcheck——专门用于检测 JavaScript 和 Node.js 项目中未使用依赖项的工具
文章目录 Depcheck 是什麽核心功能📚检测未使用的依赖🐛检测缺失的依赖✨支持多种文件类型🌍可扩展性 安装与使用1. 安装 Depcheck2. 使用 Depcheck Depcheck 的应用总结项目源码: Depcheck 是什麽 来看一个常见错误场景…...

前端构建工具vite的优势
1. 极速冷启动 Vite 使用原生 ES 模块 (ESM) 在开发环境下进行工作。相比于传统构建工具需要打包所有的文件,Vite 只在浏览器请求模块时动态加载所需的文件。无打包冷启动:无需预先打包,项目启动非常快,尤其对于大型项目效果更明…...

hive查询语句
1.基本语法 SELECT [ALL | DISTINCT]select_expr, select_expr, ... FROM table_reference [WHERE where_condition] [GROUP BYcol_list] [HAVING where_condition] [ORDER BYcol_list] [CLUSTER BYcol_list | [DISTRIBUTE BY col_list] [SORT BY col_list] ] [LIMIT number] …...

【AIGC】2024-ECCV-ControlNet++:通过有效的一致性反馈改进条件控制
2024-ECCV-ControlNet: Improving Conditional Controls with Efficient Consistency Feedback ControlNet:通过有效的一致性反馈改进条件控制摘要1. 引言2. 相关工作2.1 基于扩散的生成模型2.2 可控的文本到图像扩散模型2.3 语言和视觉奖励模型 3. 方法3.1. 初步3.…...
Mysql5.7变为GreatSQL 8.0.32-25过程中,SQL语句报错及解决方案
考虑兼容国产化数据库,现需要将Mysql5.7变为GreatSQL,在执行部分sql时,发现在Mysql5.7无报错,在GreatSQL有报错,在此记录一下遇到的几个错误。 1.ERROR 1231 (NO_AUTO_CREATE_USER) 1.1.报错提示 ERROR 1231 (42000…...
Qt 使用QAxObject将QTableView数据导出到Excel表格
这是我记录Qt学习过程的第6篇心得文章,主要是方便自己编写的应用程序导出Excel数据的,走了不少弯路直接上代码。 实现代码: //人员信息导出 ui->pbtn2->setEnabled(false); // 打开文件对话框,选择 excel文件 QString fil…...

fastGpt
参考本地部署FastGPT使用在线大语言模型 1 rockylinx 1 ollama安装 在rockylinux中安装的,ollama由1.5G,还是比较大,所有采用在windows下下载,然后安装的方式,linux安装 tar -C /usr -xzf ollama-linux-amd64.tgz #…...

如何全方位应对服务可用性的挑战
在数字化转型的浪潮中,运维团队正站在企业IT架构的核心位置,面对着前所未有的挑战。服务响应时间和失败率,作为衡量服务质量的重要指标,一直备受关注。然而,在追求这两项指标优化的同时,运维团队还需关注其…...

二进制方式部署k8s集群
目标任务: 1、Kubernetes集群部署架构规划 2、部署Etcd数据库集群 3、在Node节点安装Docker 4、部署Flannel网络插件 5、在Master节点部署组件(api-server,schduler,controller-manager) 6、在Node节点部署组件(kubelet,kube-proxy) 7、查看集群状态 8、运行⼀个测…...

Vivado时序报告七:Report Clock NetworkReport Clock Interaction详解
目录 一、前言 二、Report Clock Network 2.1 Report Clock Network流程 2.2 Report Clock Network报告 三、Report Clock Interaction 3.1 示例设计 3.2 配置选项 3.2.1 Options 3.2.2 Timer_Settings 3.3 Clock Interaction报告 3.3.1 Clock Pair Classification …...

HarmonyOS 组件样式@Style 、 @Extend、自定义扩展(AttributeModifier、AttributeUpdater)
1. HarmonyOS Style 、 Extend、自定义扩展(AttributeModifier、AttributeUpdater) Styles装饰器:定义组件重用样式 ;Extend装饰器:定义扩展组件样式 自定义扩展:AttributeModifier、AttributeUpdater 1.1. 区…...

信息安全工程师(73)网络安全风险评估过程
一、确定评估目标 此阶段需要明确评估的范围、目标和要求。评估目标通常包括特定的网络系统、信息系统或网络基础设施,评估范围可能涉及整个组织或仅特定部门。明确评估要求有助于确保评估过程的针对性和有效性。 二、收集信息 在评估开始之前,需要对目标…...

在MacOS玩RPG游戏 - RPGViewerPlus
背景知识 由于我一直使用Mac电脑,所以一直对Mac如何玩RPGMV/RPGMZ游戏的方式有进一步的想法。 网上能给出的方案都是自行启动一个HTTP服务进行,进行服务加载。这个方法有效,但兼容性较差。涉及到自定义功能模块的游戏,都会有报错…...

2024.10.27 直接插入排序 非递归后序遍历(复杂版)
直接插入排序 思路:用temp变量存放需要插入前面有序序列的变量,然后用里面的那个for循环寻找到需要插入的位置。 额外注意的点:arr[j1]temp;这个是因为内置循环每次出来之后所指向的位置是我们要插入的位置的前一个(-1或者插入…...

Ubuntu 22.04系统启动时自动运行ROS2节点
在 Ubuntu 启动时自动运行 ROS2 节点的方法 环境:Ubuntu 系统,ROS2 Humble,使用系统自带的 启动应用程序 目标:在系统启动时自动运行指定的 ROS2 节点 效果展示 系统启动后,自动运行小乌龟节点和键盘控制节点。 实践…...

张三进阶之路 | 基于Spring AOP的Log收集
前情提要 📌 张三对于公司的日志处理系统不满意,认为其性能不佳且功能有限。为了展示自己的能力和技术实力,他决定利用Spring AOP(面向切面编程)开发一个更高效的日志处理系统,并将其存储在Redis中。 首先…...
ubuntu新装ubuntu,重启黑屏
现象:双系统电脑向移动硬盘安装Ubuntu系统后,重启黑屏并显示Minimal BASH-like line editing is supported. For the first word, TAB lists possible command completions. Anywhere else TAB lists possible device or file completions. 又拔下无法启…...
太极安全监控系统0.8
完善后的代码及功能详细介绍 完善后的代码 python import os import sys import subprocess import re import datetime import threading import tkinter as tk from tkinter import messagebox, simpledialog, ttk import scapy.all as scapy import whois import numpy as …...

E-清楚姐姐的布告规划【01背包】
就当一个01背包写就行,只不过需要保证不交叉,w[i]覆盖i点,用一个if来判断即可 #include<bits/stdc.h> #define int long long using namespace std; int w[5005]; int f[5005]; int t,n,m; signed main() {cin>>t;while(t--){…...

哪款宠物空气净化器噪音低?希喂、美的、安德迈测评分享
今年双11,宠物空气净化器到底应该如何选?在所有的家电品类里,宠物空气净化器算是比较特殊的那个,产品迭代太快,我们把今年双11在售的各大主流品牌的宠物空气净化器统一汇总整理,发现基本一多半都是24年下半…...
Python|GIF 解析与构建(5):手搓截屏和帧率控制
目录 Python|GIF 解析与构建(5):手搓截屏和帧率控制 一、引言 二、技术实现:手搓截屏模块 2.1 核心原理 2.2 代码解析:ScreenshotData类 2.2.1 截图函数:capture_screen 三、技术实现&…...
HTML 语义化
目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案: 语义化标签: <header>:页头<nav>:导航<main>:主要内容<article>&#x…...

RocketMQ延迟消息机制
两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数,对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后…...
IGP(Interior Gateway Protocol,内部网关协议)
IGP(Interior Gateway Protocol,内部网关协议) 是一种用于在一个自治系统(AS)内部传递路由信息的路由协议,主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...
pam_env.so模块配置解析
在PAM(Pluggable Authentication Modules)配置中, /etc/pam.d/su 文件相关配置含义如下: 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块,负责验证用户身份&am…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...
【python异步多线程】异步多线程爬虫代码示例
claude生成的python多线程、异步代码示例,模拟20个网页的爬取,每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程:允许程序同时执行多个任务,提高IO密集型任务(如网络请求)的效率…...

c#开发AI模型对话
AI模型 前面已经介绍了一般AI模型本地部署,直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型,但是目前国内可能使用不多,至少实践例子很少看见。开发训练模型就不介绍了&am…...

零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)
本期内容并不是很难,相信大家会学的很愉快,当然对于有后端基础的朋友来说,本期内容更加容易了解,当然没有基础的也别担心,本期内容会详细解释有关内容 本期用到的软件:yakit(因为经过之前好多期…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现企业微信功能
1. 开发环境准备 安装DevEco Studio 3.1: 从华为开发者官网下载最新版DevEco Studio安装HarmonyOS 5.0 SDK 项目配置: // module.json5 {"module": {"requestPermissions": [{"name": "ohos.permis…...