glob

glob允许使用规则,从而获取对应规则匹配的文件。这个glob工具基于javascript.它使用了 minimatch 库来进行匹配

安装
npm install glob
引入
const glob = require('glob')
使用

glob方法可以传入三个参数:

1、需要进行匹配的文件的路径(有点类似于正则表达式)。
2、option可选项,也可以不填写。
3、回调函数,回调函数内部可以返回两个参数,一个是匹配成功后的结果会返回一个数组,如果没有匹配上不会报错会返回一个空数组,一个是失败后的结果。 示例
glob("**/*.js", options, function (er, files) {
  console.log(files)
})
常用匹配规则
    • :匹配单个路径部分中的0个或多个字符。
  1. :如果在一个路径的部分,他会匹配零个或多个目录和子目录中搜索匹配。
glob("./src/components/**/*.js", function (er, files) {
console.log(files);
return files
});
// [ './src/components/index/index.js',
// './src/components/news/n.js',
// './src/components/news/news.js' ]
  1. ?:匹配路径中某部分1个字符
glob("./src/components/**/?.js", function (er, files) {
console.log(files);
return files
});
//[ './src/components/news/n.js' ]
  1. !(模式1|模式2|模式3):匹配与所提供的任何模式不匹配的任何内容。和正则表达式的!一样

    案例中的意思是不要n.js 不要index.js,所以就只剩下new.js了
glob("./src/components/**/!(n|index).js", function (er, files) {
console.log(files)
})
// [ './src/components/news/news.js' ]
  1. [...] :匹配一个字符的范围,类似于一个正则表达式的范围。如果范围的第一个字符是!或者,它匹配任何不在范围内的字符

  2. ?(模式1|模式2|模式3):匹配所提供的模式的零或一个事件

  3. +(模式1|模式2|模式3):匹配所提供的模式的一个或多个事件。

  4. *(a|b|c) :匹配所提供的模式的零个或多个事件。

  5. @(pattern|pat*|pat?erN):匹配所提供的模式之一。

使用同步语法

在上述案例中使用的都是异步请求,调用回调得到结果,其实glob也提供了同步返回结果的API ,在这里我只列举一个

let pattern = './src/components/**/@(index|n|news).js';
console.log(glob.sync(pattern));
// [ './src/components/index/index.js',
// './src/components/news/n.js',
// './src/components/news/news.js' ]
globby

globby,是基于 glob,并进一步得到了增强

增强特性
  1. Promise 接口
  2. 多模式匹配
  3. 否定模式匹配
  4. 扩展目录: dir → dir/**/*
  5. 支持 .gitignore
(async () => {
const paths = await globby(['images','photos'],{
expandDirectories: true
});
console.log(paths);
})();
不想写了,自己查官方文档去

nodejs之glob与globby的更多相关文章

  1. Nodejs:Glob对象

    模块Glob: glob主要用处为筛选文件 API样例: var globInstance = new glob.Glob("@(a|a1|b).js",{nonull:true, ...

  2. vue搭建多页面开发环境

    自从习惯开发了单页面应用,对多页面的页面间的相互跳转间没有过渡效果.难维护极度反感.但是最近公司技术老大说,当一个应用越来越大的时候单页面模式应付不来,但是没讲怎么应付不来,所以还得自己去复习一遍这两 ...

  3. webpack分离css单独打包

    这篇文章过期了,webpack4.x已经不这么用了,最新的可以看这个地址webpack实战场景系列 原文地址:http://www.izhongxia.com/posts/44724.html CHA ...

  4. 本地dev环境,运行时用node模块自动读取并整合文件

    const http = require('http'); const fs = require('fs'); const path = require('path'); const glob = r ...

  5. 【转】前端工程筹建NodeJs+gulp+bower

    转自:http://www.myexception.cn/javascript/1781968.html npm nodejs 安装过程中会自动安装npm,nodejs安装程序会在环境变量中添加两个变 ...

  6. Nodejs进阶:如何玩转子进程(child_process)

    本文摘录自个人总结<Nodejs学习笔记>,更多章节及更新,请访问 github主页地址.欢迎加群交流,群号 197339705. 模块概览 在node中,child_process这个模 ...

  7. JS相关环境搭建:Nodejs、karma测试框架、jsDuck、Express

    第一章:压缩js(nodejs,uglify) 第一步:安装nodejs环境 直接下载http://www.nodejs.org/download/ 下载完成后直接下一步下一步即可,完了我们就具有no ...

  8. grunt让Nodejs规范起来

    Aug 17, 2013 Tags: gruntJavascriptnodejs Comments: 9 Comments grunt让Nodejs规范起来 从零开始nodejs系列文章,将介绍如何利 ...

  9. 前端工程筹建NodeJs+gulp+bower

    1.安装nodejs nodejs 官网下载安装文件 安装完成之后,在命令窗口执行,(显示nodejs版本) 和(显示npm版本)可以使用这两个命令查看是否安装成功: node -v npm -v 2 ...

随机推荐

  1. 状压DP初探·总结

    2018过农历新年这几天,学了一下状态压缩动态规划,现在先总结一下.   状态压缩其实是一种并没有改变dp本质的优化方法,阶段还是要照分,状态还是老样子,决策依旧要做,转移方程还是得列,最优还是最优, ...

  2. steps/align_si.sh

    usage: steps/align_si.sh <data-dir> <lang-dir> <src-dir> <align-dir> e.g.: s ...

  3. byte数组和int之间相互转化的方法

    Java中byte数组和int类型的转换,在网络编程中这个算法是最基本的算法,我们都知道,在socket传输中,发送者接收的数据都是byte数组,但是int类型是4个byte组成的,如何把一个整形in ...

  4. linux命令去掉_bak

    有时候有很多_bak文件,想把_bak去掉,使用linux命令 find ./ -name "*_bak" | awk -F "_" '{print $1}' ...

  5. 【blog】SpringMVC返回RSS格式的XML数据

    代码 import com.sun.syndication.feed.rss.Channel; import com.sun.syndication.feed.rss.Content; import ...

  6. IDEA 启动项目前的配置--或过程遇到的问题

    配置JDK 配置Maven路径和 仓库路径:文件->设置 配置Tomcat Server  文件-->设置 运行时 选择一个tomcat服务器 ==拓展: 本人台式机 的2016版本,因汉 ...

  7. python小练习,密码等级问题

    . # 密码安全性检查代码 . # . # 低级密码要求: . # . 密码由单纯的数字或字母组成 . # . 密码长度小于等于8位 . # . # 中级密码要求: . # . 密码必须由数字.字母或 ...

  8. 20165231 2017-2018-2 《Java程序设计》第1周学习总结

    本周学习的是一些java简单的基本编译,反编译和解释器.然后学习使用git了上传到git@osc进行代码托管,git是初学的,需要建立库然后远程上传代码,如果建立失败或者因为种种缘故无法上传的可以一个 ...

  9. python set 使用

    创建集合set python set类是在python的sets模块中,大家现在使用的python2.7.x中,不需要导入sets模块可以直接创建集合.>>>set('boy')se ...

  10. 关于Anaconda的环境和包管理

    Anaconda相对于原生python解释器具有更好的包管理功能,它有一个env文件夹,里面包含所要管理的所有环境:日常操作时我们可能会使用pytorch.Tensorflow等多个环境,由于每个环境 ...