您当前的位置:首页 > 电脑百科 > 程序开发 > 前端

如何检查前端项目中未使用的依赖包?

时间:2023-04-21 12:33:27  来源:微信公众号  作者:前端充电宝

随着前端项目中使用的依赖包越来越多,而其中一部分依赖包可能并未被项目所使用,手动查找这些依赖包既耗时又繁琐。那么,有没有工具能够快速地帮助我们识别和清理项目中未使用的依赖包呢?下面就来介绍两个用于检查未使用依赖包的常用工具!

depcheck

Depcheck 是一款用于分析项目中依赖关系的工具,它可以帮助我们找出以下问题:在 package.json 中,每个依赖包如何被使用、哪些依赖包没有用处、哪些依赖包缺失。它是解决前端项目中依赖包清理问题的一个常用工具。

Depcheck 不仅可以识别 JAVAScript 文件中的依赖关系,还支持以下语法:

  • JavaScript (ES5、ES6 和 ES7)
  • React JSX
  • CoffeeScript
  • TypeScript(需要安装 typescript 依赖)
  • SASS 和 Scss
  • Vue.js(需要安装 @vue/compiler-sfc 依赖)

可以在终端中运行一下命令来安装 depcheck(需要确保 node.js 的版本大于等于 10.0.0):

npm install -g depcheck

在安装时,报了以下错误:

 

图片

 

问题很明显就是权限不够(笔者的电脑是 M1 macBook,这里以 mac 的操作为例),问了一下 ChatGPT,给出的解答如下:

 

图片

 

这里使用最简单的第一种方案来解决,使用管理员权限来安装:

sudo npm install -g depcheck

这样就安装成功了。接下来在前端项目的根目录下执行以下命令:

depcheck

可以看到以下没有被引用的依赖包以及缺少依赖的文件:

 

图片

 

当然,这些依赖并不一定是真的没用到,比如 less、less-loader、file-loader、svgo、TypeScript 等都在项目或者 webpack 等配置中用到了,depcheck 会忽略这些包。实际上,depcheck 会忽略这些配置文件中使用到的依赖项。

depcheck 的基本语法如下:

depcheck [directory] [arguments]

其中,directory 是项目根目录(即 package.json 文件所在的目录)。如果未指定,默认为当前目录。所有参数都是可选的:

  • --ignore-bin-package=[true|false]:表示 depcheck 是否忽略包含 bin 入口的包。默认值为 false。
  • --skip-missing=[true|false]:表示 depcheck 是否跳过计算缺失的依赖项。默认值为 false。
  • --json:以 JSON 格式输出结果。当未指定时,depcheck 会以友好的格式输出。
  • --oneline:将结果作为用空格分隔的字符串输出。用于复制/粘贴很有用。
  • --ignores:一个由逗号分隔的数组,包含要忽略的包名称。它可以是 glob 表达式。例如,--ignores="eslint,babel-*"。
  • --ignore-dirs:已过时,请改用 ignore-patterns。一个由逗号分隔的数组,包含要忽略的目录名称。例如,--ignore-dirs=dist,coverage。
  • --ignore-path:指定包含描述要忽略的文件的模式的文件的路径。文件必须符合 .gitignore 规范。例如,--ignore-path=.eslintignore。
  • --ignore-patterns:用逗号分隔的描述要忽略的文件的模式。模式必须符合 .gitignore 规范。例如,--ignore-patterns=build/Release,dist,coverage,*.log。
  • --help:显示帮助信息。
  • --parsers、--detectors 和 --specials:这些参数用于高级用途。它们提供了一种易于定制文件解析器和依赖项检测的方法。。
  • --cnotallow=[文件名]:一个外部配置文件(见下文)。

例如,想忽略某些包或文件夹,可以在命令后面添加相应的选项:

depcheck --ignores="eslint" --ignore-dirs="dist"

除此之外,我们还可以在项目中增加 depcheck 的配置文件来配置要忽略解析的文件、要解析的文件、要忽略的包等,可以查看官方的文档来进行配置。

Github:https://github.com/depcheck/depcheck

npm-check

npm-check 用于检查项目中的依赖项,并提供有关过期,未使用和缺少依赖项的信息。npm-check 是基于 depcheck 实现的。它可以提示项目依赖项的状态,但它只会检查并更新项目的直接依赖项,并不会检查和更新嵌套的依赖项(即项目的依赖项的依赖项)

npm-check 具有以下特性:

  • 告诉哪些内容已经过期。
  • 提供包的文档链接,以便决定是否要更新。
  • 提醒代码中没有使用某个依赖项。
  • 通过 -g 支持全局安装的包。
  • 通过 -u 提供交互式更新,减少输入和拼写错误。
  • 支持公有和私有的 @scoped/packages。
  • 支持 ES6 风格的 import from 语法。
  • 使用安装的版本的 npm 进行模块升级,包括新的 npm@3,以确保依赖项到达预期的位置。
  • 适用于任何公共的 npm 注册表、私有注册表以及类似 Sinopia 的备用注册表。
  • 在 package.json 中设置 private: true 的包不会在注册表中查询。
  • 为命令行应用添加了表情符号。
  • 适用于 npm@2 和 npm@3,以及一些新的替代安装程序,例如 ied 和 pnpm。

可以在终端中通过以下命令来安装 npm-check(需要确保 node.js 的版本大于等于 10.9.0):

npm install -g npm-check

安装时同样遇到了权限的问题,这里也使用管理员权限来安装:

sudo npm install -g npm-check

接下来就可以执行以下命令来检测项目的 npm 包:

npm-check

执行完之后,就可以看到类似的结果:

 

图片

 

这里面会详细介绍每个 npm 的情况,可以根据实际情况进行分析。

npm-check 的基本语法如下:

npm-check <path> <options>

其中 path 是要检查的路径。默认为当前目录。可以使用 -g 检查全局模块。

除此之外,还有以下选项:

  • -u, --update 交互式更新。
  • -y, --update-all 非交互式更新。无需提示即应用所有更新。
  • -g, --global 查看全局模块。
  • -s, --skip-unused 跳过未使用的软件包检查。
  • -p, --production 跳过 devDependencies。
  • -d, --dev-only 仅查看 devDependencies(跳过 dependencies)。
  • -i, --ignore 根据成功的 glob 忽略依赖项。
  • -E, --save-exact 在 package.json 中保存精确版本(x.y.z),而不是 caret (^x.y.z)。
  • --specials depcheck 特殊功能列表,用于检查未使用的依赖项。
  • --no-color 强制启用或禁用颜色输出。
  • --no-emoji 去除表情符号支持。CI 环境默认没有表情符号。
  • --debug 显示调试输出,报告 github 上的问题时,请添加到 gist 中。

除此之外,npm-check 也像 depcheck 一样,支持在项目根目录添加配置文件来进行配置,可以查看官方的文档来进行配置。

Github:https://github.com/dylang/npm-check



Tags:前端   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
20k级别前端是怎么使用LocalStorage的,想知道吗?
当咱们把咱们想缓存的东西,存在localStorage、sessionStorage中,在开发过程中,确实有利于咱们的开发,咱们想看的时候也是一目了然,点击Application就可以看到。前言大家好,我是林...【详细内容】
2024-03-26  Search: 前端  点击:(12)  评论:(0)  加入收藏
前端不存在了?盲测64%的人更喜欢GPT-4V的设计,杨笛一等团队新作
3 月 9 日央视的一档节目上,百度创始人、董事长兼 CEO 李彦宏指出,以后不会存在「程序员」这种职业了,因为只要会说话,人人都会具备程序员的能力。「未来的编程语言只会剩下两种...【详细内容】
2024-03-11  Search: 前端  点击:(9)  评论:(0)  加入收藏
前端开始“锈化”?Vue团队开源JS打包工具:基于Rust、速度极快、尤雨溪主导
Vue 团队已正式开源Rolldown &mdash;&mdash; 基于 Rust 的 JavaScrip 打包工具。Rolldown 是使用 Rust 开发的 Rollup 替代品,它提供与 Rollup 兼容的应用程序接口和插件接口...【详细内容】
2024-03-09  Search: 前端  点击:(11)  评论:(0)  加入收藏
两年前端经验还不会手写Promise?
什么是promise?当我们处理异步操作时,我们经常需要进行一系列的操作,如请求数据、处理数据、渲染UI等。在过去,这些操作通常通过回调函数来处理,但是回调函数嵌套过多会导致代码...【详细内容】
2024-03-07  Search: 前端  点击:(23)  评论:(0)  加入收藏
十个前端冷门但好用的前端工具函数库
本文推荐十个冷门但好用的前端工具函数仓库,它们可能没有很高的知名度,但却能为你解决实际问题,提高开发效率。在前端开发中,有时候我们会遇到一些常见的功能需求,但却不知道从哪...【详细内容】
2024-02-27  Search: 前端  点击:(21)  评论:(0)  加入收藏
前端开发:Visual Studio Code和Visual studio如何选?
Visual Studio Code和Visual studio都是微软的集成开发环境(IDE),那么在实际工作中该如何选择呢。贝格前端工场对二者做一番对比,帮助您决策一下。一、Visual Studio Code的介绍...【详细内容】
2024-02-27  Search: 前端  点击:(46)  评论:(0)  加入收藏
网站开发中的前端和后端开发有什么区别
前端开发和后端开发都是干什么的?有哪些区别?通俗地讲,前端干的工作是用户可以直接看得见的,而后端开发的工作主要在服务端,用户不太能直接看到。虽然前端开发和后端开发的工作有...【详细内容】
2024-02-21  Search: 前端  点击:(32)  评论:(0)  加入收藏
一段微信小程序前端与后端连接的代码,带注解
微信小程序的前端和后端连接通常涉及到使用微信小程序提供的网络请求API与后端服务器进行通信。以下是一个简单的示例,展示如何使用微信小程序的前端代码向后端发送请求并处...【详细内容】
2024-01-24  Search: 前端  点击:(55)  评论:(0)  加入收藏
如何优雅的实现前端国际化?
JavaScript 中每个常见问题都有许多成熟的解决方案。当然,国际化 (i18n) 也不例外,有很多成熟的 JavaScript i18n 库可供选择,下面就来分享一些热门的前端国际化库!i18nexti18ne...【详细内容】
2024-01-17  Search: 前端  点击:(69)  评论:(0)  加入收藏
JavaScript前端框架2024年展望
Angular、Next.js、React和Solid的维护者和创作者们展望2024年,分享了他们计划中的改进。译自2024 Predictions by JavaScript Frontend Framework Maintainers,作者 Loraine...【详细内容】
2024-01-05  Search: 前端  点击:(91)  评论:(0)  加入收藏
▌简易百科推荐
20k级别前端是怎么使用LocalStorage的,想知道吗?
当咱们把咱们想缓存的东西,存在localStorage、sessionStorage中,在开发过程中,确实有利于咱们的开发,咱们想看的时候也是一目了然,点击Application就可以看到。前言大家好,我是林...【详细内容】
2024-03-26  前端之神  微信公众号  Tags:前端   点击:(12)  评论:(0)  加入收藏
前端不存在了?盲测64%的人更喜欢GPT-4V的设计,杨笛一等团队新作
3 月 9 日央视的一档节目上,百度创始人、董事长兼 CEO 李彦宏指出,以后不会存在「程序员」这种职业了,因为只要会说话,人人都会具备程序员的能力。「未来的编程语言只会剩下两种...【详细内容】
2024-03-11  机器之心Pro    Tags:前端   点击:(9)  评论:(0)  加入收藏
前端开始“锈化”?Vue团队开源JS打包工具:基于Rust、速度极快、尤雨溪主导
Vue 团队已正式开源Rolldown &mdash;&mdash; 基于 Rust 的 JavaScrip 打包工具。Rolldown 是使用 Rust 开发的 Rollup 替代品,它提供与 Rollup 兼容的应用程序接口和插件接口...【详细内容】
2024-03-09  OSC开源社区    Tags:Vue   点击:(11)  评论:(0)  加入收藏
两年前端经验还不会手写Promise?
什么是promise?当我们处理异步操作时,我们经常需要进行一系列的操作,如请求数据、处理数据、渲染UI等。在过去,这些操作通常通过回调函数来处理,但是回调函数嵌套过多会导致代码...【详细内容】
2024-03-07  海燕技术栈  微信公众号  Tags:Promise   点击:(23)  评论:(0)  加入收藏
网站开发中的前端和后端开发有什么区别
前端开发和后端开发都是干什么的?有哪些区别?通俗地讲,前端干的工作是用户可以直接看得见的,而后端开发的工作主要在服务端,用户不太能直接看到。虽然前端开发和后端开发的工作有...【详细内容】
2024-02-21  CarryData    Tags:前端   点击:(32)  评论:(0)  加入收藏
网站程序开发中的前后端分离技术
随着互联网的快速发展和技术的不断创新,传统的网站开发模式已经难以满足日益增长的业务需求。为了提高开发效率、增强系统的可维护性和可扩展性,前后端分离技术逐渐成为了网站...【详细内容】
2024-01-31  网站建设派迪星航    Tags:前后端分离   点击:(23)  评论:(0)  加入收藏
如何优雅的实现前端国际化?
JavaScript 中每个常见问题都有许多成熟的解决方案。当然,国际化 (i18n) 也不例外,有很多成熟的 JavaScript i18n 库可供选择,下面就来分享一些热门的前端国际化库!i18nexti18ne...【详细内容】
2024-01-17  前端充电宝  微信公众号  Tags:前端   点击:(69)  评论:(0)  加入收藏
Vue中Scope是怎么做样式隔离的?
scope样式隔离在 Vue 中,样式隔离是通过 scoped 特性实现的。当在一个组件的 <style> 标签上添加 scoped 特性时,Vue 会自动为这个样式块中的所有选择器添加一个唯一的属性,以...【详细内容】
2024-01-04  海燕技术栈  微信公众号  Tags:Vue   点击:(80)  评论:(0)  加入收藏
vue3中 ref和 reactive的区别 ?
最近有朋友在面试过程中经常被问到这么一个问题,vue3 中的ref 和 reactive的区别在哪里,为什么 要定义两个API 一个 api不能实现 响应式更新吗??带着这个疑问 ,我们 接下来进行逐...【详细内容】
2024-01-03  互联网高级架构师  今日头条  Tags:vue3   点击:(38)  评论:(0)  加入收藏
React18 与 Vue3 全方面对比
1. 编程风格 & 视图风格1.1 编程风格 React 语法少、难度大;Vue 语法多,难度小例如指令:Vue<input v-model="username"/><ul> <li v-for="(item,index) in list" :key="inde...【详细内容】
2024-01-03  爱做梦的程序员  今日头条  Tags:Vue3   点击:(72)  评论:(0)  加入收藏
站内最新
站内热门
站内头条