Динамически запускать задачу concat с динамически создаваемым файлом назначения
Я бегу grunt concat
Задача на одном из моих проектов, и это выглядит примерно так:
/**
* Concatenate | Dependencies Scripts
*/
concat: {
dependencies: {
files: {
"./Ditcoop/js/plugins.min.js": ["./Ditcoop/js/vendor/**/*.min.js", "!./Ditcoop/js/vendor/modernizr/*.js", "!./Ditcoop/js/vendor/jquery/*.js"],
"./Global/js/plugins.min.js": ["./Global/js/vendor/**/*.min.js", "!./Global/js/vendor/modernizr/*.js", "!./Global/js/vendor/jquery/*.js"],
"./Webshop/js/plugins.min.js": ["./Webshop/js/vendor/**/*.min.js", "!./Webshop/js/vendor/modernizr/*.js", "!./Webshop/js/vendor/jquery/*.js"]
}
}
}
Мой вопрос был бы, если бы я мог как-то сделать это более динамичным, не указывая каждую корневую папку. Я думал о чем-то вроде этого:
concat: {
dependencies: {
files: {
"./*/js/plugins.min.js": ["./*/js/vendor/**/*.min.js", "!./*/js/vendor/modernizr/*.js", "!./*/js/vendor/jquery/*.js"],
}
}
}
Я уверен, что не могу сделать это таким образом, но я мог бы использовать expand
вариант, я просто не уверен, как я мог бы использовать его, чтобы я мог сделать это в правой корневой папке, так что я не буду создавать один и тот же файл назначения, как много раз я запускаю concat.
1 ответ
Всегда помните, что Gruntfiles - это javascript:)
grunt.initConfig({
concat: {
dependencies: {
files: (function() {
var files = Object.create(null);
grunt.file.expand({filter: 'isDirectory'}, '*').forEach(function(dir) {
files[dir + '/js/plugins.min.js'] = [
dir + '/js/vendor/**/*.min.js',
'!' + dir + '/js/vendor/modernizr/*.js',
'!' + dir + '/js/vendor/jquery/*.js'
];
});
return files;
}()),
},
},
});
Но если ваша логика обработки зависимостей настолько сложна, вы можете рассмотреть возможность использования загрузчика модулей, такого как browserify или requirejs. Задача concat на самом деле просто для объединения простых файлов.