nodejs学习之glob

用途

以shell使用的模式匹配文件。

安装

pnpm add glob

使用

常用

import {glob} from "glob";//常用匹配
let pattern="./src/util/*.js";  //匹配src/util目录下所有js文件
let jsFiles = await glob(pattern);
jsFiles.forEach((item)=>{console.log(item);
})
console.log('=======================')
pattern="./src/**/*.js";  //匹配src目录下所有js文件
jsFiles = await glob(pattern);
jsFiles.forEach((item)=>{console.log(item);
})
console.log('=======================')
pattern="./src/**/!(index|util).js";  //匹配src目录下所有不是index.js和util.js的js文件
jsFiles = await glob(pattern);
jsFiles.forEach((item)=>{console.log(item);
})
console.log('=======================')
pattern="./src/**/@(index|util).js";  //匹配src下所有index.js和util.js文件
jsFiles = await glob(pattern);
jsFiles.forEach((item)=>{console.log(item);
})
console.log('=======================')
pattern="./src/**/??.js";  //匹配src目录下所有文件名是两个字符的js文件
jsFiles = await glob(pattern);
jsFiles.forEach((item)=>{console.log(item);
})
console.log('=======================')
pattern="./src/**/a[a-z]c.js";  //匹配src目录下所有a[a-z]c.js文件
jsFiles = await glob(pattern);
jsFiles.forEach((item)=>{console.log(item);
})
console.log('=======================')
// //不常用匹配
pattern="./src/**/?(a|b|c).js";  //匹配src目录下所有满足0或1个匹配模式的文件
jsFiles = await glob(pattern);
jsFiles.forEach((item)=>{console.log(item);
})
console.log('=======================')
pattern="./src/**/+(a|b|c).js";  //匹配src目录下所有满足1或多个匹配模式的文件
jsFiles = await glob(pattern);
jsFiles.forEach((item)=>{console.log(item);
})
console.log('=======================')
pattern="./src/**/*(a|b|c).js"; //匹配src目录下所有满足1或多个匹配模式的文件
jsFiles = await glob(pattern);
jsFiles.forEach((item)=>{console.log(item);
})
console.log('=======================')

官方文档总结

import { glob, globSync, globStream, globStreamSync, Glob } from 'glob'// 使用commonjs方式引入
// const {
//     glob,
//     globSync,
//     globStream,
//     globStreamSync,
//     Glob,
// } = require('glob')// 获取所有的js文件排除node_modules文件夹
const jsfiles = await glob('**/*.js', { ignore: 'node_modules/**' })// 设置一个取消的信号,如果超100毫秒就取消查找
const stopAfter100ms = await glob('**/*.css', {signal: AbortSignal.timeout(100),
})// 多模式也是支持的
const images = await glob(['css/*.{png,jpeg}', 'public/*.{png,jpeg}'])//当然,你也可以使用glob模式和sync函数是相同的,只是返回一个string[]另外一个返回Promise<string[]>
const imagesAlt = globSync('{css,public}/*.{png,jpeg}')// 你也可以流式传输,这是一个Minipass流
const filesStream = globStream(['**/*.dat', 'logs/**/*.log'])//如果你想这样做,可以构建一个 Glob 对象,这样如果你需要多次查找同一个文件夹,就可以更快地找到。
const g = new Glob('**/foo', {})
//glob 对象是异步迭代器,也可以执行 globIterate() 或 g.iterate(),处理方法相同
for await (const file of g) {console.log('found a foo file:', file)
}
// 将 glob 作为 glob 选项传递,以重复使用其设置和缓存
const g2 = new Glob('**/bar', g)
// 同步迭代同样有效
for (const file of g2) {console.log('found a bar file:', file)
}//您还可以通过 withFileTypes: true 来获取路径对象,这些对象就像 Dirent,但具有更多的功能,请访问 http://npm.im/path-scurry 了解其 API 的更多信息。
const g3 = new Glob('**/baz/**', { withFileTypes: true })
g3.stream().on('data', path => {console.log('got a path object',path.fullpath(),path.isDirectory(),path.readdirSync().map(e => e.name),)
})//如果使用 stat:true 和 withFileTypes,就可以按修改时间、权限模式等对结果进行排序。不过速度会稍慢一些。
const results = await glob('**', { stat: true, withFileTypes: true })
//按照修改时间排序
const timeSortedFiles = results.sort((a, b) => a.mtimeMs - b.mtimeMs).map(path => path.fullpath())//读取可读的文件
const groupReadableFiles = results.filter(path => path.mode & 0o040).map(path => path.fullpath())//可以像这样自定义忽略,比如说忽略所有 markdown 文件和所有名为 "docs "的文件夹
const customIgnoreResults = await glob('**', {ignore: {ignored: p => /\.md$/.test(p.name),childrenIgnored: p => p.isNamed('docs'),},
})//另一个有趣的用例是,只返回与其父文件夹同名的文件。的文件,加上 `.ts` 或 `.js
const folderNamedModules = await glob('**/*.{ts,js}', {ignore: {ignored: p => {const pp = p.parentreturn !(p.isNamed(pp.name + '.ts') || p.isNamed(pp.name + '.js'))},},
})//查找最近一小时内编辑的所有文件,为此,我们忽略所有超过一小时的文件
const newFiles = await glob('**', {// 需要统计,因为有mtimestat: true,// 只需要文件不需要文件夹nodir: true,ignore: {ignored: p => {return new Date() - p.mtime > 60 * 60 * 1000},// 也可以在这里添加类似的 childrenIgnored,// 但目录 mtime 在不同平台上是不一致的,所以最好不要这样做,// 除非你知道系统会可靠地跟踪这一点。},
})

官网

https://www.npmjs.com/package/glob
https://github.com/isaacs/node-glob

参考

https://blog.csdn.net/Tom_Jay/article/details/125601111

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

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

相关文章

【深度学习基础】MAC pycharm 专业版安装与激活

文章目录 一、pycharm专业版安装二、激活 一、pycharm专业版安装 PyCharm是一款专为Python开发者设计的集成开发环境&#xff08;IDE&#xff09;&#xff0c;旨在帮助用户在使用Python语言开发时提高效率。以下是对PyCharm软件的详细介绍&#xff0c;包括其作用和主要功能&…

高品质标准化诊断肝素诱导性血小板减少症试剂盒—HIT AlertTM Kit

肝素诱导的血小板减少症是一种免疫机制介导的综合征&#xff0c;实验室通常进行免疫学和功能学检测来诊断。免疫学通过检测PF4/肝素抗体来诊断&#xff0c;不考虑其激活血小板能力&#xff0c;比如ELISA&#xff0c;化学发光免疫等检测手段。功能学检测引起肝素依赖性血小板活化…

学习笔记——动态路由——OSPF链路状态通告(LSA)

十、OSPF链路状态通告(LSA) 1、链路状态通告简介 (1)LAS概述 链路状态通告(Link State Advertisement&#xff0c;LSA)是路由器之间链路状态信息的载体。LSA是LSDB的最小组成单位&#xff0c;LSDB由一条条LSA构成的。是OSPF中计算路由的重要依据。 LSA用于向其它邻接OSPF路…

Web3知识图谱,一篇读完

这张图展示了区块链生态系统的架构和主要组件。以下是对图中内容的概括总结&#xff1a; 基础层&#xff1a; 底层基础设施&#xff1a;包括光纤网络、P2P网络、非对称加密、哈希算法、默克尔树和随机数生成。共识机制&#xff1a; PoW&#xff08;工作量证明&#xff09;: 比特…

Kafka 典型问题与排查以及相关优化

Kafka 是一个高吞吐量的分布式消息系统&#xff0c;但在实际应用中&#xff0c;用户经常会遇到一些性能问题和消息堆积的问题。本文将介绍 Kafka 中一些典型问题的原因和排查方法&#xff0c;帮助用户解决问题并优化 Kafka 集群的性能。 一、Topic 消息发送慢&#xff0c;并发性…

强化学习实战1:OpenAI Gym 实验环境介绍

环境配置 我的 torch 版本是 2.3.0&#xff0c;然后 gym 版本是 0.22.0&#xff0c;python 版本是 3.8 &#xff0c;pygame 版本是 2.6.0 。 首先安装一下 gym&#xff1a; pip install gym0.22.0 -i https://pypi.tuna.tsinghua.edu.cn/simple然后安装一下 pygame&#xff…

AI究竟是在帮助开发者还是取代他们?来看大佬的观点你就明白了

AI&#xff08;人工智能&#xff09;在现代社会中扮演着越来越重要的角色&#xff0c;其在软件开发领域的应用也日益广泛。关于AI是在帮助开发者还是取代他们&#xff0c;V 哥个人认为&#xff0c;一半一半吧&#xff0c;为什么这么说&#xff0c;先不用噴&#xff0c;我们需要…

Transformer与CNN在目标检测对决:现代视觉识别的较量

标题&#xff1a;Transformer与CNN在目标检测对决&#xff1a;现代视觉识别的较量 目标检测作为计算机视觉领域的核心技术之一&#xff0c;一直在不断进化。随着深度学习的发展&#xff0c;卷积神经网络&#xff08;CNN&#xff09;和Transformer架构都已被应用于目标检测任务…

YOLOv8改进 | 注意力机制 | 增强模型在图像分类和目标检测BAM注意力【小白必备 + 附完整代码】

秋招面试专栏推荐 &#xff1a;深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 &#x1f4a1;&#x1f4a1;&#x1f4a1;本专栏所有程序均经过测试&#xff0c;可成功执行&#x1f4a1;&#x1f4a1;&#x1f4a1; 专栏目录 &#xff1a;《YOLOv8改进有效…

极狐GitLab 17.0 重磅发布,100+ DevSecOps功能更新来啦~【四】

GitLab 是一个全球知名的一体化 DevOps 平台&#xff0c;很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab &#xff1a;https://gitlab.cn/install?channelcontent&utm_sourcecsdn 是 GitLab 在中国的发行版&#xff0c;专门为中国程序员服务。可以一键式部署…

安防管理平台LntonCVS视频汇聚融合云平台智慧火电厂安全生产管理应用方案

中国的电力产业作为国民经济发展的重要能源支柱&#xff0c;被视为国民经济的基础产业之一。目前&#xff0c;我国主要依赖火力发电&#xff0c;主要燃料包括煤炭、石油和天然气等&#xff0c;通过燃烧转化为动能&#xff0c;再转变为电能输送至全国各地。火力发电量占全国发电…

【软件测试】 1+X初级 功能测试试题

【软件测试】 1X初级 功能测试试题 普通员工登录系统&#xff0c;在“个人信息维护”模块&#xff0c;可以查看和维护个人信息。个人信息维护需求包括用户&#xff08;UI&#xff09;页面、业务规则两部分。 UI 界面 个人信息维护 修改基本信息 业务规则 1. 个人信息维护页面…

环形链表1-2 js 快慢指针

环形链表1&#xff1a; 设置两个指针&#xff0c; 慢指针一次走一步&#xff0c;快指针一次走两步&#xff0c; 如果 fast null 或者 fast.next null 不存在环&#xff0c; 如果存在环&#xff0c;两个指针进入环中&#xff0c;是一个追及问题&#xff0c;一定会相遇 var h…

CB-LLM 可信大模型,让大模型可解释

CB-LLM 可信大模型&#xff0c;让大模型可解释 提出背景解法拆解目的问题框架图第1步&#xff1a;概念生成第2步&#xff1a;自动概念评分&#xff08;ACS&#xff09;第3步&#xff1a;训练概念瓶颈层&#xff08;CBL&#xff09;第4步&#xff1a;学习预测器 例子&#xff1a…

图片批量重命名bat,一个脚本快速搞定图片批量重命名

BAT 批处理 是一种在 Microsoft Windows 操作系统中使用的脚本语言&#xff0c;用于自动执行一系列预定义的命令或任务。这些命令集合通常存储在一个文本文件中&#xff0c;文件扩展名为 .bat 或 .cmd。批处理脚本可以包含简单的命令&#xff0c;如文件复制、移动、删除&#x…

单片机中有FLASH为啥还需要EEROM?

在开始前刚好我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「单片机的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01; 一是EEPROM操作简单&…

FPGA设计之跨时钟域(CDC)设计篇(2)----如何科学地设计复位信号?

1、复位是干嘛的? 时钟信号和复位信号应该是一个数字系统最重要和最常用的两个信号了。时钟的重要性大家都懂,没有时钟整个系统就无法同步,自然也就谈不上运行了。那么复位(reset)到底是干嘛的? 所有的数字系统在上电的时候都会进行复位,这样才能确保该系统的初始运行状…

WebRTC API接口教程:实现高效会议的步骤?

WebRTC api接口教程如何使用&#xff1f;WebRTC api接口的功能&#xff1f; WebRTC无需中间服务器即可传输音视频流&#xff0c;为视频会议、在线教育等应用提供了强大的支持。AokSend将详细介绍如何利用WebRTC API接口实现高效会议的步骤。 WebRTC API接口教程&#xff1a;获…

Python 上位机开发

Python 上位机开发 第一节:入门介绍 在这第一节中,我们将对 Python 上位机开发进行一个初步的了解和探索。 首先,什么是上位机?上位机通常是指可以与下位机(如单片机、传感器等硬件设备)进行通信和交互,实现数据采集、控制指令发送以及数据处理和展示的计算机程序。 Pyt…

随着人工智能和机器学习的发展,如何在 C# 中有效地集成深度学习框架,以实现复杂的模型训练和预测功能,并且能够在不同的平台上进行部署和优化?

在C#中集成深度学习框架并实现复杂的模型训练和预测功能可以通过以下步骤进行&#xff1a; 选择适合的深度学习框架&#xff1a;目前在C#中可用的深度学习框架有多种选择&#xff0c;如TensorFlow.NET、CNTK、ML.NET等。根据具体需求选择一个适合的框架。 安装和配置深度学习框…