2013-10-21 10 views
17

In Gruntfile.js, ho avuto:Cosa significa `{, * /}` nei percorsi di Gruntfile.js?

watch: { 
    styles: { 
     files: [ 
     '<%= yeoman.app %>/styles/{,*/}*.less' 
     ], 
     tasks: ['copy:styles', 'autoprefixer'] 
    } 
} 

Per il percorso, cosa vuol dire {,*/} davvero? In che modo differisce dall'uso dei doppi asterischi **/?

risposta

13

Questo modello è ampiamente usato in modelli Yeoman: significa guardare solo un livello profondo gerarchia delle cartelle. Viene usato principalmente per motivi di prestazioni, dal momento che guardare troppi file contemporaneamente può essere lento (o addirittura impossibile).

+0

Grazie per menzionare specificamente Yeoman . Hai un riferimento ai problemi di prestazioni? –

+0

https://github.com/yeoman/generator-webapp/pull/20 per esempio – vkurchatkin

+0

Grazie per il riferimento, anche se sembra che la preoccupazione riguardasse più il numero totale di file di orologi, indipendentemente dalla profondità delle directory. –

11

Credo che si sta utilizzando un minimatch pattern lì.

Il doppio asterisco è un glob che provoca la ricorsione in sottodirectory.

Il singolo asterisco corrisponde a solo 0 o più caratteri nella directory corrente (corrisponde a tutti i caratteri tranne il carattere barra).

Ad esempio, a/**/d corrisponderà a/b/c/d.

27

Questi sono globbing patterns per Grunt, sostenuta dalle librerie node-glob e minimatch.

In sostanza:

  • * corrisponde ogni numero di caratteri, ma non/
  • ** corrisponde ogni numero di caratteri, compreso/, fintanto che è l'unica cosa che in una parte percorso
  • {} consente per una lista separato da virgole di "o" espressioni

Quindi, styles/{,*/}*.less corrisponde i seguenti file:

  • MENO file all'interno styles directory
  • file MENO all'interno sottodirectory diretti di styles directory (ma non più profondo)
+0

Questa è la spiegazione più corretta – Willa

+0

Grazie! Risparmia 2 ore per me. ;) –

0

La risposta è globbing-patterns.

Le altre risposte erano già rispondere a cosa vuol dire {,*/}*.

Ma la differenza tra **/ e {,*/}* è la profondità della cartella .

  • /styles/{,*/}*.less è stato suddiviso in due situazioni

    1. /styles/*.less
    2. /styles/*/*.less

Ad esempio

/styles/{,*/}*.less corrisponderà /styles/x.less (situazione 1)

/styles/{,*/}*.less anche corrispondere /styles/test/x.less (situazione 2)

Ma /styles/{,*/}*.less può non corrispondere /styles/test/test1/x.less

Ma /styles/**/*.less possono farlo