Как я могу пропустить грубое задание, если каталог пуст
Я использую grunt-contrib's concat
а также uglify
модули для обработки некоторых JavaScript. В настоящее время, если src/js/
пусто, они все равно создадут (пустой) concat'd файл вместе с минимизированной версией и исходной картой.
Я хочу, чтобы задача обнаружить, если src/js/
папка пуста, прежде чем продолжить, и если это так, то задача должна пропустить (не провалиться). Есть идеи, как это сделать?
3 ответа
Решение может быть не самым красивым, но может дать вам представление. Вам нужно будет запустить что-то вроде npm install --save-dev glob
первый. Это основано на части Milkshake
проект, который вы упомянули.
grunt.registerTask('build_js', function(){
// get first task's `src` config property and see
// if any file matches the glob pattern
if (grunt.config('concat').js.src.some(function(src){
return require('glob').sync(src).length;
})) {
// if so, run the task chain
grunt.task.run([
'trimtrailingspaces:js'
, 'concat:js'
, 'uglify:yomama'
]);
}
});
Суть для сравнения: https://gist.github.com/kosmotaur/61bff2bc807b28a9fcfa
С этим плагином:
https://www.npmjs.org/package/grunt-file-exists
Вы можете проверить существование файла. (Я не пробовал, но источник выглядит как расширение поддержки grunt. (*, ** ...)
Например, вот так:
grunt.initConfig({
fileExists: {
scripts: ['a.js', 'b.js']
},
});
grunt.registerTask('conditionaltask', [
'fileExists',
'maintask',
]);
Но, возможно, если файл не существует, он потерпит неудачу с ошибкой вместо простого пропуска. (Я не проверял это.)
Если это проблема, вы можете немного изменить источник этого плагина для запуска связанной задачи, если файл существует:
Конфиг:
grunt.initConfig({
fileExists: {
scripts: ['a.js', 'b.js'],
options: {tasks: ['maintask']}
},
});
grunt.registerTask('conditionaltask', [
'fileExists',
]);
И вы должны добавить это:
grunt.task.run(options.tasks);
В этом файле:
https://github.com/alexeiskachykhin/grunt-file-exists/blob/master/tasks/fileExists.js
после этой строки:
grunt.log.ok();
Возможно, это просто более актуальный ответ, так как остальным больше года, но для этого вам не нужен плагин; ты можешь использовать grunt.file.expand
проверить, существуют ли файлы, соответствующие определенному шаблону глобализации.
Обновление ответа @Kosmotaur (здесь просто жесткий код, хотя для простоты):
grunt.registerTask('build_js', function(){
// if any file matches the glob pattern
if (grunt.file.expand("subdir/**/*.js").length) { /** new bit here **/
// if so, run the task chain
grunt.task.run([
'trimtrailingspaces:js'
, 'concat:js'
, 'uglify:yomama'
]);
}
});