depcheck 检查项目中依赖的使用情况 避免幽灵依赖的产生

news2024/9/19 17:29:58

depcheck 检查项目中依赖的使用情况 避免幽灵依赖的产生

什么是幽灵依赖 (幻影依赖) 形成原因

幽灵依赖是指node_modules中存在 而package.json中没有声明过的依赖 但却能够在项目的依赖树中找到并使用的模块

  1. Node.js 的模块解析规则: Node.js 采用了一种非传统的模块加载机制,允许模块在其父目录以及祖先目录的 node_modules 目录中查找依赖。当两个或更多的直接依赖间接依赖同一个模块但版本要求不同时,可能会在更高层级的 node_modules 目录中出现一个版本,这个版本虽未被项目直接声明,却会被依赖树中的其他模块使用,形成“幽灵依赖”。
  2. npm 的扁平化安装策略: 早期 npm 安装依赖时遵循树状结构,即每个依赖包的 node_modules 目录中包含其所有子依赖。后来为了减少磁盘空间占用和降低模块加载复杂度,npm 引入了扁平化(或称拉平)安装策略,使得相同模块只在最顶层的 node_modules 目录中保留一个实例。这种策略可能导致某些模块虽然未被项目直接引用,但由于被多个直接依赖共享,从而成为项目依赖树的一部分
  3. 间接依赖的变动 当直接依赖更新时,它们可能引入新的间接依赖或者升级已有间接依赖的版本,导致项目中出现了未经显式声明但在运行时被使用的模块版本,形成“幽灵依赖”。

幽灵依赖会导致什么问题

  1. 版本不确定性 由于未在项目配置中明确指定,幽灵依赖的版本控制变得困难,可能导致项目构建或运行时使用了开发者意料之外的模块版本,引发兼容性问题或行为差异。
  2. 安全风险: 隐藏的依赖可能包含已知漏洞,而在常规的依赖管理和审计过程中容易被忽视,增加了项目的安全风险。
  3. 维护困难:当出现问题时,定位和管理幽灵依赖较为困难,因为它们并不直接体现在 package.json 文件中。

避免幽灵依赖的产生

  1. 使用package-lock.json 生成文件版本锁 记录依赖的模板和依赖树的状态 避免直接引入package.json 未声明的依赖直接使用 防止间接引入的发生
  2. 使用 npm list <package_name> --depth=0 等来查看依赖的层级关系
  3. 使用depcheck检查项目依赖的安装情况

depcheck使用

安装 npm install -g depcheck

使用 在项目目录下直接执行命令 depcheck
注意: 此插件识别的并不完全准确 需根据项目自行调整 例如@vue那几个文件就肯定是需要的

在这里插入图片描述
更多关于depcheck 的命令https://www.npmjs.com/package/depcheck
其他链接 https://blog.csdn.net/weixin_59816940/article/details/131395326
https://blog.csdn.net/linhieng/article/details/137358219
https://blog.csdn.net/black_cat7/article/details/133854985

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

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

相关文章

C++速通LeetCode简单第20题-多数元素

方法一&#xff1a;暴力解法&#xff0c;放multiset中排序&#xff0c;然后依次count统计&#xff0c;不满足条件的值erase清除。 class Solution { public:int majorityElement(vector<int>& nums) {int ans 0;multiset<int> s;for(int i 0;i < nums.s…

「iOS」viewController的生命周期

iOS学习 ViewController生命周期有关方法案例注意 ViewController生命周期有关方法 init - 初始化程序&#xff1b;loadView - 在UIViewController对象的view被访问且为空的时候调用&#xff1b;viewDidLoad - 视图加载完成后调用&#xff1b;viewWillAppear - UIViewControll…

给大模型技术从业者的建议,入门转行必看!!

01—大模型技术学习建议‍‍‍ 这个关于学习大模型技术的建议&#xff0c;也可以说是一个学习技术的方法论。 首先大家要明白一点——(任何)技术都是一个更偏向于实践的东西&#xff0c;具体来说就是学习技术实践要大于理论&#xff0c;要以实践为主理论为辅&#xff0c;而不…

换个手机IP地址是不是不一样?

在当今这个信息爆炸的时代&#xff0c;手机已经成为我们生活中不可或缺的一部分。而IP地址&#xff0c;作为手机连接网络的桥梁&#xff0c;也时常引起我们的关注。你是否曾经好奇&#xff0c;换个手机&#xff0c;IP地址会不会也跟着变呢&#xff1f;本文将深入探讨这个问题&a…

Android15之编译Cuttlefish模拟器(二百三十一)

简介&#xff1a; CSDN博客专家、《Android系统多媒体进阶实战》一书作者 新书发布&#xff1a;《Android系统多媒体进阶实战》&#x1f680; 优质专栏&#xff1a; Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a; 多媒体系统工程师系列【…

直流斩波电路

目录 1. 降压斩波电路&#xff08;Buck Converter&#xff09; 2. 升压斩波电路&#xff08;Boost Converter&#xff09; 3. 升降压斩波电路&#xff08;Buck-Boost Converter&#xff09; 4. Cuk斩波电路&#xff08;Cuk Converter&#xff09; 直流斩波电路是一种将直流…

Unity3D下如何播放RTSP流?

技术背景 在Unity3D中直接播放RTSP&#xff08;Real Time Streaming Protocol&#xff09;流并不直接支持&#xff0c;因为Unity的内置多媒体组件&#xff08;如AudioSource和VideoPlayer&#xff09;主要设计用于处理本地文件或HTTP流&#xff0c;而不直接支持RTSP。所以&…

上海人工智能实验室开源视频生成模型Vchitect 2.0 可生成20秒高清视频

上海人工智能实验室日前推出的Vchitect2.0视频生成模型正在悄然改变视频创作的游戏规则。这款尖端AI工具不仅简化了视频制作流程&#xff0c;还为创作者提供了前所未有的灵活性和高质量输出。 Vchitect2.0的核心优势在于其强大的生成能力和高度的可定制性。用户只需输入文字描…

用Matlab求解绘制2D散点(x y)数据的最小外接圆、沿轴外接矩形

用Matlab求解绘制2D散点&#xff08;x y&#xff09;数据的最小外接圆、沿轴外接矩形 0 引言1 原理概述即代码实现1.1 最小外接圆1.2 沿轴外接矩形 2 完整代码3 结语 0 引言 本篇简单介绍下散点数据最小外接圆、沿轴外接矩形的简单原理和matlab实现过程。 1 原理概述即代码实现…

C语言-数据结构 有向图拓扑排序TopologicalSort(邻接表存储)

拓扑排序算法的实现还是比较简单的&#xff0c;我们需要用到一个顺序栈辅助&#xff0c;采用邻接表进行存储&#xff0c;顶点结点存储入度、顶点信息、指向邻接结点的指针&#xff0c;算法过程是&#xff1a;我们先将入度为0的顶点入栈&#xff0c;然后弹出栈顶结点&#xff0c…

使用CUBE_MX使用I2C通信,实现对EEPROM的读写

一、使用CUBE_MX配置 1.配置I2C 2.配置USART1 3.重中之重(在KEIL5打开串口使用的库) 二、KEIL5配置 #include "main.h" #include "i2c.h" #include "gpio.h" #include "usart.h"#include <stdio.h>void SystemClock_Config(vo…

flash_attention简要笔记

优化效果 原来&#xff0c;attention部分的计算量和中间激活占用显存的复杂度都是 O ( N 2 ) O(N^2) O(N2) 计算量部分原来QK矩阵乘和attn_scoreV矩阵乘的计算量&#xff0c;复杂度都是 O ( N 2 ) O(N^2) O(N2)&#xff1b;中间激活因为中间有一个attn_score&#xff0c;所以复…

如何接口对接发送视频短信

随着移动通信技术的飞速发展&#xff0c;视频短信作为一种创新的多媒体信息传递方式&#xff0c;正逐渐成为众多行业不可或缺的沟通工具。它不仅丰富了信息传递的形式&#xff0c;还显著提高了信息接收者的参与度和满意度。 支持免费对接试用乐讯通PaaS平台 找好用的短信平台,选…

数据结构:(OJ141)环形列表

给你一个链表的头节点 head &#xff0c;判断链表中是否有环。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置&#xff08;…

探索iPhone一键删除重复照片的方法

在iPhone用户的生活中&#xff0c;存在一个不变的真理&#xff1a;不管你的照片库有多干净&#xff0c;重复的照片总会找到一种方法悄无声息地积累起来&#xff0c;就像袜子在洗衣机中神秘消失那样不可思议。而当你最终决定处理这些重复照片时&#xff0c;你可能已经面临着一个…

Electron 图标修改

目录 1. 图片基本要求 2. 在main.js中配置icon 位置 ​3. 在package.json 中配置icon 位置 4. 问题&#xff1a;左上角图片 开发环境下显示&#xff0c;生产环境下不显示 1. 图片基本要求 图片格式为ico&#xff0c;图片像素像素为256*256&#xff1b; 将ico文件放在pub…

基于Springboot的医疗健康助手开题报告

文未可获取一份本项目的java源码和数据库参考。 一&#xff0e;选题意义, 研究现状,可行性分析 选题意义&#xff1a;随着科技的高速发展&#xff0c;人们的生活水平也正在稳步提高&#xff0c;解决温饱问题以后&#xff0c;广大人民群众也越来越注重自己的身体健康&#xff0…

openGauss 基于PITR的恢复

作者&#xff1a;IT邦德 中国DBA联盟(ACDU)成员&#xff0c;10余年DBA工作经验&#xff0c; Oracle、PostgreSQL ACE CSDN博客专家及B站知名UP主&#xff0c;全网粉丝10万 擅长主流Oracle、MySQL、PG、高斯及Greenplum备份恢复&#xff0c; 安装迁移&#xff0c;性能优化、故障…

聚焦汽车智能化与电动化,亚洲领先的汽车工业技术博览会 2025年11月与您相约 AUTO TECH 华南展

抢占市场先机︱聚焦汽车智能化与电动化&#xff0c;亚洲领先的汽车工业技术博览会 2025年11月与您相约 AUTO TECH 华南展 随着汽车智能化与电动化的迅猛发展&#xff0c;汽车电子技术、车用功率半导体技术、智能座舱技术、轻量化技术/材料、软件定义汽车、EV/HV技术、测试测量技…

python之openpyxl模块——实现Excel表格的处理(万字教学,全网最全,超详细!)

文章目录 前言1、Excel表格介绍扩展&#xff1a;.xls 和 .xlsx 2、openpyxl 模块2.1 模块的安装2.2 基础操作2.2.1 生成Excel文件对象&#xff0c;查看所有sheet表2.2.2 通过表名得到表对象2.2.3 获取活动表对象2.2.4 获取表格中数据所占大小2.2.5 获取单元格中的数据2.2.6 获取…