74 votes

grunt (minimatch/glob) l'exclusion des dossiers

J'ai une situation où je suis en train d'utiliser grunt à de la poussière d'une base de code, à l'exclusion des dossiers spécifiques.

grunt utilise minimatch (similaire à bsdglob) sous le capot de faire correspondre les fichiers, mais je n'arrive pas à comprendre comment faire un .gitignore style exclure d'un dossier.

J'aimerais intégrer ce:

ignoreme

et match:

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

mais ne pas correspondre à ce:

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

Ceci correspondra à tout, y compris ignoreme:

/**/*.js

J'ai donc pensé que je pouvais faire quelque chose comme:

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

mais qui correspond à des fichiers dans les ignoreme dossier.

Je suis habitué à regexes, mais n'arrive pas à comprendre comment répéter un dessin ou quelque chose ici - j'ai aussi essayé des trucs comme:

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

en espérant que le conteneur de le répéter, mais cela ne fonctionne pas, il a juste ne correspondent tout.

De toute façon pour passer un regex pour grunt les chemins de fichiers, ou de faire ce travail pour moi?

Mise à jour:

Voici comment je suis actuellement aux prises avec 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 le dossier exclut sont possibles dans minimatch.

148voto

Cowboy Ben Alman Points 1211

À l'heure actuelle-dans-le développement de la version 0.4.0 une, grunt.file.expand méthode prend désormais en charge les exclusions, et qui est un sans doute moins complexe que le sous-jacent minimatch correspondant de la bibliothèque. Cela est possible parce qu' grunt.file.expand accepte plusieurs modèles (alors que minimatch n'accepte qu'un seul).

De grunt.fichier.développez documentation:

Cette méthode accepte séparées par une virgule caractères génériques ou un tableau de caractères génériques. Les chemins de la reconnaissance de motifs que commencer ! seront exclus du tableau retourné. Les modèles sont traitées dans l'ordre, donc, d'inclusion et d'exclusion ordre est important.

Cela signifie que vous pouvez spécifier ['/**/*.js', '!**/ignoreme/**'] et alors que le premier modèle serait ajouter tous .js fichiers de l'ensemble de résultats, le second modèle serait alors supprimer tous /ignoreme/ des fichiers à partir de l'ensemble de résultats.

Jetez un oeil à la grognement.fichier.match des tests unitaires si vous êtes vraiment curieux.

Notez que la version de grunt offrant cette fonctionnalité n'a pas été officiellement publié, mais si vous êtes intéressés à l'utiliser dans un projet, voir Quand vais-je être en mesure d'utiliser dans le développement de la fonctionnalité "X"? Entrée de la FAQ.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X