Ich versuche, einen Glob für etwas zu schreiben, das minimatch
verwendet und Probleme beim Ausschließen der Dateien, die ich möchte. Hier ist ein Testfall:Was ist los mit meinem 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
Die Ausgabe mit diesem ist:
"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' ]
Sie können eine Live-Version dieser here sehen.
Wie Sie sehen können, enthält es sowohl die test
als auch die stub
Dateien. Was muss mein Glob sein, damit diese Dateien ausgeschlossen sind?
Ihre glob ist ein String kein reguläres Ausdruck –
const glob = 'src/js/* (foo | bar | baz) .js' ist ihr jedes Problem beim Ausprobieren dieser Regex? Abgesehen davon, dass es sehr lang sein kann! –
Ja, das ist ein isoliertes Beispiel, um das Kernproblem einfacher zu lösen. In Wirklichkeit habe ich viel mehr Dateien (und werde mehr Überstunden hinzufügen). Ich muss das wirklich funktionieren wie codiert. Außerdem gebe ich den Glob an eine dritte Partei weiter, also kann ich keine Regex verwenden, es muss ein echter Glob sein. – kentcdodds