使用node glob匹配文件

使用node glob这个库可以很轻松地匹配指定的目录下的所有文件,例如

glob('src/**')

它表示匹配src目录下的所有文件。但是需要注意的是它默认不匹配以.开头的文件。如果需要匹配以.开头的文件需要指定dot: true这个配置项。

glob('src/**', { dot: true })

如果想忽略匹配某些目录,可以设置ignore选项。

glob('src/**', { ignore: ['node_modules/**'], dot: true })

这表示匹配src目录下的所有文件,包括以.开头的文件,但是不包括node_modules下的所有文件。

在这基础上如果给ignore添加一个.开头的文件忽略就会出现问题了。

如文件结构如下

.
└── test
    ├── .a
    ├── .b
    │   ├── d.js
    │   └── .f
    └── c.txt

使用如下方式匹配

glob('test/**', { dot: true, ignore: ['.b/**'] })

输出结果

[
  'test',
  'test/.a',
  'test/.b',
  'test/.b/.f',
  'test/.b/d.js',
  'test/.c.txt'
]

期望结果是不匹配.b目录下的所有文件,但是结果却仍然匹配到了.b文件夹下的所有文件,这里设置的ignore并没有生效。

这是因为.b位于子文件夹,要给.b前面也加上前缀通配符才可以。

glob('test/**', { dot: true, ignore: ['**/.b/**'] })

输出结果

[ 'test', 'test/.a', 'test/.c.txt' ]
如果您觉得本文对您有用,欢迎捐赠或留言~
微信支付
支付宝

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注