Повторное использование местоположения src/dest для нескольких операций concat
В настоящее время у меня есть эта настройка, используя https://github.com/gruntjs/grunt-contrib-concat:
concat: {
injectedJs: {
'dist/js/inject/beatportInject.js': ['src/js/thirdParty/jquery.js', 'src/js/inject/beatportInject.js'],
'dist/js/inject/streamusInject.js': ['src/js/thirdParty/jquery.js', 'src/js/thirdParty/lodash.js', 'src/js/inject/streamusInject.js'],
'dist/js/inject/streamusShareInject.js': ['src/js/thirdParty/jquery.js', 'src/js/thirdParty/lodash.js', 'src/js/inject/streamusShareInject.js'],
'dist/js/inject/youTubeInject.js': ['src/js/thirdParty/jquery.js', 'src/js/thirdParty/lodash.js', 'src/js/inject/youTubeInject.js'],
'dist/js/inject/youTubeIFrameInject.js': ['src/js/thirdParty/jquery.js', 'src/js/thirdParty/lodash.js', 'src/js/inject/youTubeIFrameInject.js']
}
}
Этот код работает, но в этих строках явно много не-СУХОГО кода.
Я надеюсь очистить это, выразив тот факт, что я:
- Всегда хочу, чтобы 'dest' был 'dist / js / inject /'
- Всегда хочу, чтобы 'src' начинался с 'src / js /'
Итак, я могу сказать что-то похожее на этот псевдокод:
concat: {
injectedJs: {
files: [{
expand: true,
dest: 'dist/js/inject/',
cwd: 'src/js'
//'beatportInject.js': ['thirdParty/jquery.js', 'inject/beatportInject.js'],
//'streamusInject.js': ['thirdParty/jquery.js', 'thirdParty/lodash.js', 'inject/streamusInject.js'],
//'streamusShareInject.js': ['thirdParty/jquery.js', 'thirdParty/lodash.js', 'inject/streamusShareInject.js'],
//'youTubeInject.js': ['thirdParty/jquery.js', 'thirdParty/lodash.js', 'inject/youTubeInject.js'],
//'youTubeIFrameInject.js': ['thirdParty/jquery.js', 'thirdParty/lodash.js', 'inject/youTubeIFrameInject.js']
}]
}
}
Мои мысли терпят неудачу в этой точке. Этого можно достичь с помощью Grunt, или мне нужно немало повторений?
1 ответ
Помните, что конфиг - это просто простой javascript, поэтому самое простое решение, которое не включает взлом Grunt, это просто
function prefix(fileConfig) {
var newFileConfig = {};
var distPrefix = 'dist/js/inject/';
var srcPrefix = 'src/js/';
for(var dest in fileConfig) {
newFileConfig[distPrefix + dest] = srcPrefix + fileConfig[dest];
}
return newFileConfig;
}
grunt.initConfig({
concat : {
injectedJs : {
files: [
prefix({
'beatportInject.js': ['thirdParty/jquery.js', 'inject/beatportInject.js'],
'streamusInject.js': ['thirdParty/jquery.js', 'thirdParty/lodash.js', 'inject/streamusInject.js'],
'streamusShareInject.js': ['thirdParty/jquery.js', 'thirdParty/lodash.js', 'inject/streamusShareInject.js'],
'youTubeInject.js': ['thirdParty/jquery.js', 'thirdParty/lodash.js', 'inject/youTubeInject.js'],
'youTubeIFrameInject.js': ['thirdParty/jquery.js', 'thirdParty/lodash.js', 'inject/youTubeIFrameInject.js']
})
]
}
}
})
Что касается вашей реальной проблемы, конкатенации скриптов, кажется, что вы действительно должны рассмотреть что-то вроде Browserify или WebPack. Это избавит вас от многих проблем.