当前位置:首页 > 技术分析 > 正文内容

qnm 早该火了,前端真的迫切需要?

大家好,很高兴又见面了,我是"高级前端进阶",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发!

1.什么是 qnm

前端开发经常需要反复检查 node_modules 目录中安装的模块版本。 当前的解决方案(例如运行 npm list)速度很慢并且会产生大量不相关的输出。而检查特定模块的 package.json 文件中的版本需要做更多的事情,而且无法提供有关同一模块的其他实例的信息。

qnm (querying node_modules)是一个通过提供有关已安装模块的快速且集中的信息来解决此问题的工具,支持 npm 和 yarn,并允许开发者快速识别 node_modules 中感兴趣模块的版本从而提高版本问题的排查效率。

A simple cli utility for querying the node_modules directory

qnm 具有以下丰富特征:

  • 支持 交互式模糊搜索
  • 支持匹配所有带有特定字符串的包
  • 解释当前项目为什么会安装特定的包
  • 支持单一仓库
  • 显示特定包的特定版本发布时间以及最新版本是什么

目前 qnm 在 Github 通过 MIT 协议开源,有超过 1.8k 的 star、是一个值得关注的前端工具类开源项目。

2.如何使用 qnm

可以使用 Bunx/npx 来运行 qnm,而 Bunx 是最快的方法:

bunx qnm [module]
  • Bunx 是 Bun x 的别名,当安装 Bun 时, Bunx CLI 将自动安装。可以使用 Bunx 从 npm 自动安装和运行软件包,相当于 Bun 的 npx 或 yarn dlx 。
  • npx 代表 Node Package Execute,包含在 npm 中。如果安装 5.2 以上的 npm,npx 将自动安装。它是 npm 包运行程序,可以执行 npm 注册表中的任何包而无需安装。

例如,如果想查看 lodash 的已安装版本可以通过下面的命令来完成:

bunx qnm lodash
// 使用 bunx命令

此时将会输出如下的内容:

// 类似于一棵树
lodash 4.17.21  2 days ago
├── 4.17.21 
├─┬ cli-table2
│ └── 3.10.1  1 year ago
└─┬ karma
  └── 3.10.1  1 year ago

以下输出表示 node_modules 中出现了 3 次 lodash,同时还包含更多的内容信息:

  • ./node_module/lodash
  • ./node_module/cli-table2/node_modules/lodash 表示 cli-table2 依赖的 lodash
  • ./node_module/karma/node_modules/lodash 表示 karma 依赖的 lodash
  • lodash 的最新版本是 4.17.21,2 天前发布
  • 另外 2 个 lodash (3.10.1) 是一年前发布的

同时 qnm 还支持模糊搜索,比如下面的示例展示了在 CLI 中运行 qnm 的效果示例:

如上图所述,使用不带参数的 qnm 命令可以用来触发类似 fzf 的模糊搜索。这里值得一提的是,fzf 本质上是一个通用的命令行模糊查找器,代表交互式 Unix 命令行过滤器,可以与任何list一起使用,比如: 文件、命令历史记录、进程、主机名、书签、git 提交等。目前在 Github 上已经有大约 60k+ 的star、妥妥的顶级开源项目。

brew install fzf
// To install useful key bindings and fuzzy completion:
$(brew --prefix)/opt/fzf/install

qnm的模糊搜索功能也非常优秀,支持以下丰富功能:

  • 开始输入内容以过滤 node_modules 中的匹配项
  • 使用箭头上下移动光标
  • Enter 键选择项目,CTRL-C / ESC 退出
  • TAB 和 Shift-TAB 用于标记多个项目

同时 qnm 还支持众多高级配置,比如:

  • --no-remote:不从 npm 获取远程数据,如果希望 qnm 运行得更快,请使用此选项。 qnm 将显示有限的视图。
  • -o , --open:使用默认编辑器打开模块的 package.json 文件。
  • -d, --debug:查看完整的错误消息,主要用于调试。
  • --disable-colors:禁用大部分颜色和样式, 例如:版本颜色。

3.命令行工具

  • doctor

显示 node_modules 中最重的模块,如果想了解 node_modules 目录上什么包占用了最多的空间,这会很有帮助。

bunx qnm doctor

下面根据模块在 node_modules 中的重复数量对模块进行排序。

bunx qnm doctor --sort duplicates
// 按照重复次数排序
  • list

下面 list命令返回node_modules目录中所有模块的列表。

bunx qnm list
// 类似于 npm list
  • match

match 与 grep 类似,并且匹配包含所提供字符串的任何模块。 例如,下面命令用于查看安装了哪些 eslint 插件:

> bunx qnm match eslint-plug

eslint-plugin-babel
└── 3.3.0

eslint-plugin-lodash
└── 2.6.1

eslint-plugin-mocha
└── 4.12.1

eslint-plugin-react
└── 6.10.3

关于 qnm 的更多特性和用法可以参考文末的资料,本文不再过多展开。

4.qnm注意事项

虽然 qnm 过去是全局安装,但依然建议开发者使用npx/bunx来运行,它的速度更快。 如果确实更喜欢全局安装,可以使用以下命令进行:

npm i --global qnm

目前最新的版本是 v2.10.3 ,该版本的主要修改是通过缓存更多 getter 来提高性能,而从 v 2.0.0 版本开始 qnm 就陆续带来了很多重大的优秀的变更:

  • 显示每个包的发布时间,以及最新版本是什么
  • path-parse 从 1.0.6 提升到 1.0.7
  • 将 Hosted-git-info 从 2.8.8 升级到 2.8.9
  • trim-newlines 从 3.0.0 修改为 3.0.1
  • 将标准化 url 从 4.5.0 提升到 4.5.1
  • 将 glob-parent 从 5.1.1 提升到 5.1.2
  • 将 ws 从 7.4.1 提升到 7.4.6
  • lodash 从 4.17.20 到 4.17.21
  • 支持 Node.js >= 12

本文总结

本文主要和大家介绍 qnm,即一个通过提供有关已安装模块的快速且集中的信息来解决此问题的工具,支持 npm 和 yarn,并允许开发者快速识别 node_modules 中感兴趣模块的版本从而提高版本问题的排查效率。

因为篇幅有限,文章并没有过多展开。如果有兴趣,文末的参考资料提供了大量优秀文档以供学习。


参考资料

https://github.com/ranyitz/qnm

https://www.codingninjas.com/studio/library/difference-between-npm-and-npx

https://github.com/junegunn/fzf

https://github.com/ranyitz/qnm

https://github.com/junegunn/fzf

https://github.com/ranyitz/qnm/blob/master/CHANGELOG.md

扫描二维码推送至手机访问。

版权声明:本文由ruisui88发布,如需转载请注明出处。

本文链接:http://www.ruisui88.com/post/3505.html

标签: npm list
分享给朋友:

“qnm 早该火了,前端真的迫切需要?” 的相关文章

厅监控结算中心加强高速公路联网收费系统运行管理

厅监控结算中心加强高速公路联网收费系统运行管理,一是严格PSAM卡管理要求,加强跟踪各营运公司PSAM卡使用情况,切实做到PSAM卡专人保管,定期核查,做好联网收费系统基础安全工作。二是督促各营运公司加强3G备份链路管理,保障数据应急通道的畅通,确保车道数据正常传输。三是落实标识站建设工作,督促各营...

Vue组件通信之props深入详解!

props 是 Vue 组件中一个很重要的概念。它是用来从父组件向子组件传递数据的。为什么需要props?这是因为在Vue中,组件是相互隔离的。每个组件都有自己的作用域,子组件无法直接访问父组件的状态或值。通过props,父组件可以将数据传递给子组件。使用props的步骤:1. 在子组件中定义pro...

Java教程:gitlab-使用入门

1 导读本教程主要讲解了GitLab在项目的环境搭建和基本的使用,可以帮助大家在企业中能够自主搭建GitLab服务,并且可以GitLab中的组、权限、项目自主操作GitLab简介GitLab环境搭建GitLab基本使用(组、权限、用户、项目)2 GitLab简介GitLab是整个DevOps生命周期...

你感动了吗?佳能超规格镜头 RF 24-105mm F2.8深度测评

如果要你选一支用作多题材创作的挂机镜头,那我相信很多人会选择24-105mm这个焦段的镜头。作为一支可以实现从广角到长焦的变焦镜头,24-105mm有着丰富的焦段选择。只是基于镜头体积以及光学结构上的限制,此前的24-105mm镜头只能恒定在F4的光圈。而佳能打破了这一限制,将实用焦段和恒定光圈完美...

三维家-系统快捷键使用

快键件使用:通过简单的键盘+鼠标操作,快速完成搭配。1.基础快捷键1) Ctrl+V:复制选中对象第一步:鼠标左击物体,按下Ctrl+V 即可复制选中对象。2) Ctrl+G:组合多选对象第一步:按住Ctrl键多选对象--按住Ctrl+G--确定。3) Ctrl+B:解组选中对象第一步:左击选中对象...

Vue学习笔记之动态路由的参数传递应用及技巧

路由的参数传递:①通过params的类型· 配置路由格式:/router/:id· 传递的方式:在path后面跟上对应的值· 传递后形成的路径:/router/list,/router/profile这个就是前两篇中提到的"动态路由"中有应用过这个方法:②通过query的类型(对象方...