>node-glob模块被众多前段构建工具使用;如fis,grunt,glup;内部使用了minimatch来匹配文件
>匹配规则
* *匹配0或多个个字符,但不包括'/';
var glob = require('glob');
var pattern = '*.js';
glob(pattern, function(err, files){
console.log(files);
});
//--获取目录下所有js文件;
* ?匹配1个字符;
var pattern = 'node_modules/glo?.js';
glob(pattern, function(err, files){
console.log(files);
});
* **匹配多个任意字符;
var pattern = 'node_modules/**.js';
//--匹配node_modules目录下的js文件,不匹配子目录中的文件,
//--当设置options中的matchBase:true时则匹配node_modules所有文件
* [pattren|pattern] : 匹配其中的一个;
* ?(pattern|pattern) 匹配其中的一个或0个;不可以组合;
var pattern = 'node_modules/?(a|b).js';
//--匹配a.js,b.js;不匹配ab.js
* +(pattern|pattern) 匹配其中一个或多个;可任意组合
var pattern = 'node_modules/+(a|b).js'
//--匹配a.js,b.js,ab.js,aab.js,abb.js;不匹配abc.js
* *(pattern|pattern):匹配其中的0个或多个。可以组合
var pattren = 'node_modules/*(a|b).js';
//--匹配a.js,b.js,ab.js,aab.js,abb.js;不匹配abc.js
* @(pattern|pattern):匹配其中的一个,不能为空;不可组合;
var pattren = 'node_modules/@(a|b).js';
//--与?(pattern|pattern)相似
>注意事项:
* 默认不匹配'.'开头命名的文件;在options中设置dot: true则匹配;
* 如果pattern没有匹配任何文件,默认返回[];如果需要返回pattern本省,在options中设置nonull:true;
>构造函数Glob:
var Glob = glob.Glob;
new Glob(pattern,options,function(err,matchs){
console.log(matchs);
});
* 同步执行:
var Glob = glob.Glob;
var options = {
sync:true
};
var gl = new Glob(pattern,options);
//--此时matchs挂在载实例对象的found属性上;
console.log(gl.found);
* 事件
//--四个事件end,error,abort,match;当设置options的sync:true时事件无效,因为实例化返回的是其他对象,而不是实例对象
end: 结束事件,提供matchs参数
error: 错误事件,提供错误信息;
abort:终止事件,当abort()方法调用时触发
match:匹配到文件时触发
var Glob = require('glob').Glob;
var path = require('path')
var src = path.resolve(__dirname,'./node_modules');
var pattern = '**/*.js';
var options = {
dot:true,
cwd:src
};
var gl = new Glob(pattern,options);
gl.on('match',function (file){
console.log('match',file)
});
gl.on('end',function (files){
console.log(files)
})
gl.on('error',function (err){
console.log(err.stack)
})
* 方法:
//--三个方法abort,pause,resume
var Glob = require('glob').Glob;
var path = require('path')
var src = path.resolve(__dirname,'./node_modules');
var pattern = '**/*.js';
var options = {
dot:true,
cwd:src
};
var gl = new Glob(pattern,options);
var index = 0;
gl.on('match',function (file){
console.log('match',file,index)
gl.pause()
setTimeout(function (){
index>=5 && gl.abort()
gl.resume();
index++;
},1000)
});
gl.on('abort',function (){
console.log('abort')
});
>glob静态方法;
* glob.sync(pattern,options):返回匹配的matchs;
var glob = require('glob');
var path = require('path')
var src = path.resolve(__dirname,'./node_modules');
var pattern = '**.js';
var options = {
dot:true,
cwd:src,
matchBase:true,
};
var matchs = glob.sync(pattern,options);
console.log(matchs)