Pregunta exclusión de la carpeta grunt (minimatch / glob)


Tengo una situación en la que intento usar grunt para eliminar una base de código, excluyendo carpetas específicas.

grunt usa minimatch (similar a bsdglob) debajo del capó para hacer coincidir los archivos, pero parece que no puedo entender cómo hacer que un estilo .gitignore excluya de una carpeta.

Me gustaría ingerir esto:

ignoreme

y unir estos:

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

pero no coincide con estos:

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

Esto coincidirá con todo, incluso ignoreme:

/**/*.js

Así que pensé que podría hacer algo como:

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

pero eso coincide con los archivos en la carpeta ignoreme.

Estoy acostumbrado a las expresiones regulares, pero parece que no puedo entender cómo repetir un patrón o algo aquí. También probé cosas como las siguientes:

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

esperando que el contenedor se repita, pero eso no funciona, simplemente no puede hacer coincidir todo.

¿Hay alguna manera de pasar una expresión regular a las rutas de archivos gruñidos, o hacer que esto funcione para mí?

Actualizar:

Así es como estoy lidiando actualmente con este problema:

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

Todavía estaría interesado si las exclusiones de carpetas son posibles en minimatch.


73
2017-09-28 00:34


origen


Respuestas:


En la versión 0.4.0a actualmente en desarrollo, el grunt.file.expand El método ahora admite exclusiones, y lo hace de una manera posiblemente menos compleja que la biblioteca de coincidencias de minimotos subyacente. Esto es posible porque grunt.file.expand acepta múltiple patrones (mientras que minimatch solo acepta uno).

De la documentación de grunt.file.expand:

Este método acepta patrones comodín separados por comas o una matriz de patrones comodín. Rutas que coinciden con los patrones que comienzan! se excluirá de la matriz devuelta. Los patrones se procesan en orden, por lo que el orden de inclusión y exclusión es significativo.

Eso significa que puedes especificar ['/**/*.js', '!**/ignoreme/**'] y mientras que el primer patrón agregaría todo .js archivos al conjunto de resultados, el segundo patrón eliminaría todo /ignoreme/ archivos del conjunto de resultados.

Eche un vistazo a la pruebas de unidad de grunt.file.match si eres realmente curioso

Tenga en cuenta que la versión de grunt que ofrece esta funcionalidad no se ha lanzado oficialmente, pero si le interesa usarla en un proyecto, consulte la ¿Cuándo podré usar la función de desarrollo 'X'? Entrada de preguntas frecuentes


148
2017-09-28 03:12