Здравствуйте.
Возникло затруднение в обработке путей в Grunt, а именно задачу concat: как передать что-то из найденных путей в значение целевого пути?
Есть примерно такая структура проекта:
src
-js
--Core
---Core.js
---Something.js
---0_Header.js
--FileLoader
---ExternalInterface.js
---Core.js
---Helper.js
Необходимо чтобы concat собирал примерно вот так:
build
-js
--Ext
---Core
----Core.min.js
---FileLoader
----FileLoader.min.js
Здесь подошло бы что-то вроде этого:
concat: {
***
files: {
'build/js/Ext/$1/$1.min.js': ['src/js/(*)/**/*.js']
}
***
}
Но это не работает. Отдельно прописывать каждый модуль, когда явно можно автоматизировать - глупо.
Как правильно прописать? Благодарю.
Ответ
Как вариант - сформировать нужный объект руками:
var files = {};
grunt.file.expand("./src/js/*").forEach(function (dir) {
var dirname = dir.replace(/^.*[\\\/]/, '');
files['build/js/Ext/' + dirname + '.min.js'] = ['src/js/' + dirname + '/**/*.js'];
});
И использовать в конфигурации для concat:
grunt.initConfig({
concat: {
dist: {
files: files
}
}
});
Альтернатива - использовать возможность переименовать dst (регулярка на скорую руку, не учитывает backslah-и):
grunt.initConfig({
concat: {
dist: {
files:[{
expand: true,
src: ['src/js/**/*.js'],
rename: function (dst, src) {
return src.replace(/src\/js\/([^\/]*).*/, 'build/js/Ext/$1/$1.min.js');
}
}]
}
}
});
Комментариев нет:
Отправить комментарий