Что означает `{,*/}` в путях к Gruntfile.js?

В Gruntfile.js у меня есть:

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

Что на самом деле означает {,*/} для пути? Чем это отличается от использования двойных звездочек **/?


person hllau    schedule 21.10.2013    source источник


Ответы (4)


Этот паттерн широко используется в шаблонах yoman: он означает просмотр только на один уровень вглубь иерархии папок. Он используется в основном из соображений производительности, поскольку одновременный просмотр слишком большого количества файлов может быть медленным (или даже невозможным).

person vkurchatkin    schedule 21.10.2013
comment
Спасибо за конкретное упоминание Йомена. У вас есть ссылка на проблемы с производительностью? - person Ted M. Young; 27.08.2014
comment
Спасибо за ссылку, хотя похоже, что забота была больше об общем количестве просмотренных файлов, независимо от глубины каталогов. - person Ted M. Young; 30.08.2014
comment
Наверное, да, но меньшая глубина => меньше файлов (как правило). В любом случае, я не думаю, что этот подход хорош, потому что он меняет правильность на производительность. - person vkurchatkin; 30.08.2014
comment
Итак, исходя из этого, в чем разница между использованием {,*/} и /*/, поскольку я попробовал одиночный *, и он отлично работал в моем скрипте grunt concat... - person redfox05; 18.02.2016
comment
Можем ли мы использовать этот паттерн и в хрюканье? - person Shivek Parmar; 08.01.2018

Это шаблоны подстановки для Grunt, поддерживаемые node-glob и minimatch.

В основном:

  • * соответствует любому количеству символов, но не /
  • ** соответствует любому количеству символов, включая /, если это единственное значение в части пути.
  • {} позволяет использовать разделенный запятыми список выражений "или"

Итак, styles/{,*/}*.less соответствует следующим файлам:

  • МЕНЬШЕ файлы внутри каталога styles
  • МЕНЬШЕ файлы внутри прямых подкаталогов каталога styles (но не глубже)
person Rockallite    schedule 19.03.2014
comment
Благодарю вас! Сэкономьте 2 часа для меня. ;) - person Amin Mousavi; 15.05.2017

Я полагаю, что вы используете здесь шаблон мини-соответствия.

Двойная звездочка — это глобус, который вызывает рекурсию в подкаталоги.

Одна звездочка соответствует только 0 или более символам в текущем каталоге (она соответствует всем символам, кроме косой черты).

Например, a/**/d будет соответствовать a/b/c/d.

person JRP    schedule 21.10.2013

Ответ: globbing-patterns .

В других ответах уже был ответ, что означает {,*/}*.

Но разница между **/ и {,*/}* заключается в глубине папки.

  • /styles/{,*/}*.less был разделен на две ситуации

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

Например

/styles/{,*/}*.less будет соответствовать /styles/x.less (ситуация 1)

/styles/{,*/}*.less также будет соответствовать /styles/test/x.less (ситуация 2)

Но /styles/{,*/}*.less не может сравниться с /styles/test/test1/x.less

Но /styles/**/*.less может это сделать

person Miku Ghoul    schedule 16.08.2017