web-dev-qa-db-fra.com

exclusion de dossier grunt (minimatch / glob)

J'essaie dans certains cas d'utiliser grunt pour filtrer un code, en excluant des dossiers spécifiques.

grunt utilise minimatch (similaire à bsdglob) sous le capot pour faire correspondre les fichiers, mais je n'arrive pas à comprendre comment faire une exclusion à la manière d'un style .gitignore.

Je voudrais ingérer ceci:

ignoreme

et correspondre à ceux-ci:

/folder/path/here/to/something/ok.js
/another/folder/path.js
/test.js

mais ne correspond pas à ceux-ci:

/folder/ignoreme/something.js
/folder/path/here/to/ignoreme/metoo/file.js

Cela correspond à tout, y compris à ignoreme:

/**/*.js

Alors j'ai pensé que je pourrais faire quelque chose comme:

/**/!(ignoreme)/**/*.js

mais cela correspond aux fichiers du dossier ignoreme.

Je suis habitué aux expressions rationnelles, mais je n'arrive pas à comprendre comment répéter un motif ou quelque chose ici. J'ai aussi essayé des choses comme:

/(!(ignoreme)|*)*/*.js

en espérant que le conteneur se répète, mais cela ne fonctionne pas, il ne correspond tout simplement pas.

Est-il possible de passer une expression rationnelle pour grogner les chemins de fichiers ou de faire en sorte que cela fonctionne pour moi?

Mise à jour:

Voici comment je traite actuellement ce problème:

var pattern = /\/ignoreme\//
var files = grunt.file.expandFiles(arrayOfFilesPassedToMinimatch).filter(function(f){
  return !pattern.test(f)
})

Je serais toujours intéressé si les dossiers exclus sont possibles en minimatch.

74
Jesse

Dans la version 0.4.0a en cours de développement, la méthode grunt.file.expand Prend désormais en charge les exclusions, d'une manière sans doute moins complexe que la bibliothèque de correspondance minimatch sous-jacente. Ceci est possible car grunt.file.expand Accepte plusieurs modèles (alors que minimatch n'en accepte qu'un seul).

De la documentation grunt.file.expand :

Cette méthode accepte soit des modèles de caractères génériques séparés par des virgules, soit un tableau de modèles de caractères génériques. Les chemins correspondant aux modèles qui commencent par! sera exclu du tableau retourné. Les modèles sont traités dans l'ordre, l'ordre d'inclusion et d'exclusion est donc important.

Cela signifie que vous pouvez spécifier ['/**/*.js', '!**/ignoreme/**'] Et que le premier modèle ajoute tous les fichiers .js Au jeu de résultats, le second motif supprime ensuite tous les fichiers /ignoreme/ Du jeu de résultats.

Jetez un coup d'œil aux tests unitaires de grunt.file.match si vous êtes vraiment curieux.

Notez que la version de grunt offrant cette fonctionnalité n’a pas encore été officiellement publiée, mais si vous souhaitez l’utiliser dans un projet, reportez-vous à la section Quand pourrai-je utiliser la fonctionnalité de développement en cours "X"? FAQ entrée.

149
Cowboy Ben Alman