Node Glob

根据自己的理解翻译了这篇Node Glob部分内容。第一次翻译E文,不到之处各位客官轻拍,定改之。

原文全文 —— 《Glob

Usage

var glob = require(‘glob’);

// options is optional

glob(‘**/*.js’, options, function(er, files) {

// files 为所有匹配到的文件名数组

// 如果设置了·nonull: true·,并且没有匹配到任何文件,那么files是[‘**/*.js‘]

// er 为一个error对象或null

});

Glob Primer

“Globs”是一种类似命令行命令 ls *.js这样的玩意儿,亦或是像.gitignore文件里的build/*。

在解析路径pattern时,其中花括号为扩展设置,以“{”开始,“}”结束,如果花括号里设置多个匹配项,需要用“,”作为分割符,可以包含“/”作为路径。

e.g :

a{/b/c,bcd} -> 将匹配a/b/c、abcd

下面的字符用在路径部分会有特殊魔法效应:

  • * -> 匹配一个路径中的0或多个字符。
  • ? -> 匹配1个字符。
  • […] -> 匹配一个字符范围区间,类似RegExp range。如果以“ ! ”或“ ^ ”开头,将匹配除此range之外的字符。
  • !(pattern|pattern|pattern) -> 匹配任何除“()”里匹配到的之外玩意儿,有点绕舌,简单点说就是只要不是“()”里pattern匹配的都符合匹配条件
  • ?(pattern|pattern|pattern) -> 匹配0或1个符合pattern匹配条件的字符(少于1个)
  • +(pattern|pattern|pattern) -> 匹配1个或以上的符合pattern匹配条件的字符(至少1个)
  • *(pattern|pattern|pattern) -> 匹配0或多个符合pattern匹配条件的字符(任意个)
  • @(pattern|pat*|pat?erN) -> 精确匹配其中一个pattern
  • ** 如果(globstar)仅仅是路径的一部分,那么它将匹配任意目录,以及任意层级的子目录,但是对符号链接的目录不感兴趣(不匹配符号链接目录)

Dots - “ . ”

如果文件或目录路径的一部分含有“ . ”,并且是第一个字符,那么不匹配任何blob pattern,只匹配原字符“ . ”。

e.g:

pattern: .*  -> 将匹配 .filename.ext、.gitignore  etc

pattern: a/.*/c  -> 将匹配 a/.anyDirectory/c

可以通过options设置项“ {dot: true} ”将“ . ”设置成可通过patterns匹配的普通的

字符。

Basename Matching

如果在options里设置了“ {matchBase: true} ”,并且pattern字串里不包含“ / ”,那么将会匹配目录树下任何目录里的相匹配文件。

e.g :

pattern: *.js  -> 将匹配 any/directory/path/filename.js

Empty Sets

如果pattern没有匹配到文件,那么将返回一个空数组。和shell有所不同,shell返回pattern本身字符串,

e.g :

$ echo a*s*d*f

a*s*d*f

如果你习惯bash风格的行为模式,设置options -> {nonull: true}

glob.hasMagic(pattern, [options])

如果pattern里含有特殊字符返回 true ,反之返回 false。

注意:options会影响结果。如果设定options -> {noext:true},那么 +(a|b) 将不考虑magic pattern。如果pattern含有花括号,类似 a/{b/c,x/y}这样的会被考虑magical,除非设定options -> {no brace: true}。

glob(pattern,[options],cb)

  • pattern {String}匹配模式
  • options {Object}
  • cb {Function}
  • ? err {Error | null}
  • ? matches {Array} 根据pattern匹配到的文件名数组

做异步glob查寻。

glob.sync(pattern,[options])

  • pattern {String}匹配模式
  • options {Object}
  • return:{Array} 根据pattern匹配到的文件名数组

做同步glob查寻

Class: glob.Glob

通过 glob.Glob 类,创建一个glob对象示例

var Glob = require(‘glob’).Glob;

var mg = new Glob(pattern, options, cb);

这是一个事件发射器(EventEmitter),并且会开始从文件系统立即找到匹配。

new glob.Glob(pattern,[options],[cb])

  • pattern {String}搜索模式
  • options {Object}
  • cb {Function}每当发生错误时被调用,又或者是有被匹配到项也会被调用
  • ? err {Error | null}
  • ? matches {Array} 被匹配到的文件名数组

注意:如果在options 设置 sync 标记,那么匹配项将立即被 g.found一员获得。

Properties

  • minimatch glob通配符使用的是minimatch对象
  • options 通过options对象设置影响其结果
  • aborted 设置为true 调用abort()。在呼出abort()之后不再继续glob查寻,但是可以重复使用statCache,从而避免重复系统调用。
  • cache 各种对象,每个字段都可能会有以下的值:
  • ? false -> 路径不存在
  • ? true -> 路径存在
  • ? ‘DIR’ -> 路径存在,并且不是目录
  • ? ‘FILE’ -> 路径存在,并且是目录
  • ? [file, entries, …] -> 路径存在,并且是目录,此数组的值是fs.readdir的结果
  • statCache fs.stat产生的结果的缓存,防止多次相同路径的缓存
  • symlinks 在解析有关 ** 模式的时候,记录路径的符号链接
  • realpathCache 能过fs.realpath 减少不必要的系统调用的可选对象。这存储在一个实例化的glob对象上,并且可以重复使用。

Events

  • end 当匹配结束时,并且所有匹配项被发现时触发。

如果options设置了nonull 并且没有匹配到,那么 matches 列表包含原始pattern。

匹配项被排序,除非options设置了 nosort。

  • match 每一次匹配项被匹配到后触发。
  • error 每当遭遇到意外错误或 fs 错误出现(如果设置了options.strict)时触发。
  • abort 每当abort() 被调用时,事件被触发。

Methods

  • pause 暂时停止查寻
  • resume 查寻的摘要
  • abort 停止查寻

Options

所有配置项都可以通过Minimatch,也可以通过Glob改变匹配模式。此外,有些已经被添加或有特定glob的后果。

所有配置项的默认值为false,除非另外告知。

所有配置项被添加到Glob对象。

如果你运行了许多glob操作,你可以通过Glob对象传递options参数,后续快速操作一些 stat 和 readdir 调用。

At the very least, you may pass in shared symlinks, statCache, realpathCache, and cache options, so that parallel glob operations will be sped up by sharing information about the filesystem.

  • cwd The current working directory in which to search. Defaults to process.cwd().
  • root The place where patterns starting with / will be mounted onto. Defaults topath.resolve(options.cwd, "/") (/ on Unix systems, and C:\ or some such on Windows.)
  • dot Include .dot files in normal matches and globstar matches. Note that an explicit dot in a portion of the pattern will always match dot files.
  • nomount By default, a pattern starting with a forward-slash will be "mounted" onto the root setting, so that a valid filesystem path is returned. Set this flag to disable that behavior.
  • mark Add a / character to directory matches. Note that this requires additional stat calls.
  • nosort Don‘t sort the results.
  • stat Set to true to stat all results. This reduces performance somewhat, and is completely unnecessary, unless readdir is presumed to be an untrustworthy indicator of file existence.
  • silent When an unusual error is encountered when attempting to read a directory, a warning will be printed to stderr. Set the silent option to true to suppress these warnings.
  • strict When an unusual error is encountered when attempting to read a directory, the process will just continue on in search of other matches. Set the strict option to raise an error in these cases.
  • cache See cache property above. Pass in a previously generated cache object to save some fs calls.
  • statCache A cache of results of filesystem information, to prevent unnecessary stat calls. While it should not normally be necessary to set this, you may pass the statCache from one glob() call to the options object of another, if you know that the filesystem will not change between calls. (See "Race Conditions" below.)
  • symlinks A cache of known symbolic links. You may pass in a previously generated symlinksobject to save lstat calls when resolving ** matches.
  • sync DEPRECATED: use glob.sync(pattern, opts) instead.
  • nounique In some cases, brace-expanded patterns can result in the same file showing up multiple times in the result set. By default, this implementation prevents duplicates in the result set. Set this flag to disable that behavior.
  • nonull Set to never return an empty set, instead returning a set containing the pattern itself. This is the default in glob(3).
  • debug Set to enable debug logging in minimatch and glob.
  • nobrace Do not expand {a,b} and {1..3} brace sets.
  • noglobstar Do not match ** against multiple filenames. (Ie, treat it as a normal * instead.)
  • noext Do not match +(a|b) "extglob" patterns.
  • nocase Perform a case-insensitive match. Note: on case-insensitive filesystems, non-magic patterns will match by default, since stat and readdir will not raise errors.
  • matchBase Perform a basename-only match if the pattern does not contain any slash characters. That is, *.js would be treated as equivalent to **/*.js, matching all js files in all directories.
  • nodir Do not match directories, only files. (Note: to match only directories, simply put a / at the end of the pattern.)
  • ignore Add a pattern or an array of patterns to exclude matches.
  • follow Follow symlinked directories when expanding ** patterns. Note that this can result in a lot of duplicate references in the presence of cyclic links.
  • realpath Set to true to call fs.realpath on all of the results. In the case of a symlink that cannot be resolved, the full absolute path to the matched entry is returned (though it will usually be a broken symlink)
  • nonegate Suppress deprecated negate behavior. (See below.) Default=true
  • nocomment Suppress deprecated comment behavior. (See below.) Default=true
时间: 2024-11-08 22:02:14

Node Glob的相关文章

node - glob模块

node的glob模块允许你使用 *等符号, 来写一个glob规则,像在shell里一样,获取匹配对应规则的文件. 这个glob工具基于javascript.它使用了 minimatch 库来进行匹配 用法: 首先下载glob包:  npm install glob 调用格式: var glob = require("glob") // options 是可选的 glob("**/*.js", options, function (er, files) { // f

glob模式

在学习gulp的过程中,gulp使用了被称作为glob的文件匹配模式. 接下来我们认识下什么是glob模式. 在计算机编程中,特别是类Unix环境,glob模式通过通配符来匹配文件名.例如:Unix命令,将所有以扩展名为.txt的文件从当前目录拷贝到textfiles目录. 1 mv *.txt textfiles/ 这里[*]是一个匹配任意数量字符基本通配符,*.txt就表示一个glob模式.另一个通用的通配符是[?],它表示任意一个字符. 最常用的通配符是 *,?,[…]: 通配符 描述 例

npm包

https://www.cnblogs.com/xinxingyu/p/5736244.html     node - glob模块讲解 https://github.com/isaacs/node-glob     glob模块GitHub地址 原文地址:https://www.cnblogs.com/yuqingfamily/p/8453942.html

node中glob模块

glob glob允许使用规则,从而获取对应规则匹配的文件 node的glob模块允许你使用 * 等符号,来写一个glob规则,像在shell里一样,获取匹配对应规则文件 安装 npm install glob 引用 const glob = require('glob') glob的三个参数: 1.需要进行匹配的文件的路径(有点类似于正则表达式) 2.option可选项,也可以不填写 3.回调函数,回调函数内部可以返回两个参数,一个是匹配成功后的结果会返回一个数组, 如果没有匹配上不会报错会返

node js 常用模块

前100个依赖库里,underscore是属于语言基础类,express是服务器框架,有5.6个测试框架.以及5.6个递归遍历目录树的工具类.3个左右的命令行解析工具类,3个主流数据库的链接client库,2个ws库,多个js/CSS前端处理工具链,3-4个promise库,多个模版库,多个jquery/cavans/dom模拟器以及解析器,一个静态分析器,两个验证库 总得来说,node.js的前100个流行模块应该就可以代表node.js解决问题的问题域 ===================

在node.js中使用mongose模块

对象与文档相对应 创建项目目录,用root进入 # mkdir /home/test/part9/ 直接# npm install mongoose,报错如下 ../node_modules/nan/nan.h:316:47: error: ‘REPLACE_INVALID_UTF8’ is not a member of ‘v8::String’ static const unsigned kReplaceInvalidUtf8 = v8::String::REPLACE_INVALID_UT

程序员使用Node的十个技巧

从问世到现在将近20年,JavaScript一直缺乏其它有吸引力的编程语言,比如Python和Ruby,的很多优点:命令行界面,REPL,包管理器,以及组织良好的开源社区.感谢Node.js和npm,现如今的JavaScript鸟枪换炮了.Web开发者有了强大的新工具,接下来就看他们的想象力了. 下面这个提示和技巧清单,能让你和你的node程序保持快乐. 1. 用npm init开始新项目 npm有个init命令,可以引导你完成创建package.json文件的过程.即便你非常熟悉package

Node.js读写文件之批量替换图片

问题:文件夹A中有大量图片文件,需要用另外一个图片替换掉A中图片,但是命名保持不变. 手工的做法如下: 1)浏览器打开图片->2)另存为->3)目标文件夹->4)找到一个图片->5)替换->6)确定 然后,重复步骤2)和之后的步骤.不小心会漏掉或重复. 这么麻烦,使用node.js来处理改如何呢?代码如下: 1 var fs=require('fs'), 2 cp=require('child_process'); 3 var url='Moriarty.jpg' 4 var

使用Node.JS监听文件夹变化

使用Node.JS监听文件夹改变有许多应用场合,比如: 构建自动编绎工具 当源文件改变时,自动运行build过程,比如当你写CoffeeScript文件或SASS CSS文件时,保存之后可即时生成对应的JS或CSS. 构建自动布署工具 通过侦听源文件夹的改变,你可以自动即时将改后的文件布署到测试服务器,加快你的开发测试速度. 这些工具其实都需要侦听文件夹的改变,基于Node.JS的侦听文件夹改变的模块有很多. fs.watch 其中Node.JS的文件系统也可侦听某个目录的改变, 如fs.wat