Как убедиться, что grunt выбирает только файлы (не папки)?

Я пытаюсь объединить все библиотеки JS в нашем проекте в один файл. Итак, я настроил задачу concat в grunt со следующим селектором файлов:

dist : {
  src  : ["public/lib/**/*.js"],
  dest : "public/lib.concat.js"
}

Все идет нормально. Однако в нашем проекте мы используем sprintf.js. Таким образом, внутри каталога public/lib есть каталог sprintf.js, и этот каталог соответствует селектору src в grunt.

Результатом этого является:

$ grunt
Running "concat:dist" (concat) task
Warning: Unable to read "public/lib/sprintf.js" file (Error code: UNKNOWN). Use --force to continue.

Я знаю, что мог бы просто выбрать другое имя для каталога sprintf.js, но я хотел бы знать, есть ли способ указать grunt выбирать только фактические файлы, а не каталоги.


person Der Hochstapler    schedule 19.01.2014    source источник


Ответы (2)


Используйте параметр фильтра, чтобы игнорировать каталоги:

dist : {
  src  : ["public/lib/**/*.js"],
  dest : "public/lib.concat.js",
  filter: function(filepath) {
    return !grunt.file.isDir(filepath);
  }
}
person Ilan Frumer    schedule 19.01.2014
comment
Я действительно хочу сопоставить подкаталоги. Я просто хочу, чтобы он прочитал файл внутри каталога sprintf.js. Но grunt пытается прочитать каталог, как если бы это был файл. - person Der Hochstapler; 19.01.2014

должно быть еще проще. вы можете просто исключить восклицательный указатель:

dist : {
  src  : ["public/lib/**/*.js", "!public/lib/sprintf.js" ],
  dest : "public/lib.concat.js"
}
person hereandnow78    schedule 19.01.2014