我的 glob 怎么了?
What's wrong with my glob?
我正在尝试为使用 minimatch
的东西编写一个 glob,但在排除我想要的文件时遇到了问题。这是一个测试用例:
const glob = 'src/js/*!(test|stub).js' // this is the glob I'm trying to work out
const shouldMatch = [
'src/js/foo.js',
'src/js/bar.js',
'src/js/baz.js',
]
const shouldNotMatch = [
'src/js/foo.test.js',
'src/js/bar.stub.js',
'src/baz/blob.js',
]
const all = shouldMatch.concat(shouldNotMatch)
const matched = minimatch.match(all, glob) // https://www.npmjs.com/package/minimatch
expect(matched).toEqual(shouldMatch) // https://npmjs.com/package/expect
输出为:
"Error: Expected [ 'src/js/foo.js', 'src/js/bar.js', 'src/js/baz.js', 'src/js/foo.test.js', 'src/js/bar.stub.js' ] to equal [ 'src/js/foo.js', 'src/js/bar.js', 'src/js/baz.js' ]
你可以看到这个 here 的实时版本。
如您所见,它包括 test
和 stub
文件。 我的 glob 需要什么才能排除这些文件?
这是 !(...)
语法的常见错误。想象一下这样的事情:
ls *!(.png|.jpg)
这不符合我们的要求,因为 .png
和 .jpg
与 *
匹配。所以一旦我们到达 !(.png|.jpg)
,字符串为空。
要修复它,我们可以这样做:
ls !(*.png|*.jpg)
因此,修正你的例子:
const glob = 'src/js/!(*test|*stub).js'
我正在尝试为使用 minimatch
的东西编写一个 glob,但在排除我想要的文件时遇到了问题。这是一个测试用例:
const glob = 'src/js/*!(test|stub).js' // this is the glob I'm trying to work out
const shouldMatch = [
'src/js/foo.js',
'src/js/bar.js',
'src/js/baz.js',
]
const shouldNotMatch = [
'src/js/foo.test.js',
'src/js/bar.stub.js',
'src/baz/blob.js',
]
const all = shouldMatch.concat(shouldNotMatch)
const matched = minimatch.match(all, glob) // https://www.npmjs.com/package/minimatch
expect(matched).toEqual(shouldMatch) // https://npmjs.com/package/expect
输出为:
"Error: Expected [ 'src/js/foo.js', 'src/js/bar.js', 'src/js/baz.js', 'src/js/foo.test.js', 'src/js/bar.stub.js' ] to equal [ 'src/js/foo.js', 'src/js/bar.js', 'src/js/baz.js' ]
你可以看到这个 here 的实时版本。
如您所见,它包括 test
和 stub
文件。 我的 glob 需要什么才能排除这些文件?
这是 !(...)
语法的常见错误。想象一下这样的事情:
ls *!(.png|.jpg)
这不符合我们的要求,因为 .png
和 .jpg
与 *
匹配。所以一旦我们到达 !(.png|.jpg)
,字符串为空。
要修复它,我们可以这样做:
ls !(*.png|*.jpg)
因此,修正你的例子:
const glob = 'src/js/!(*test|*stub).js'