我花了很多时间用谷歌搜索,但Grunt生态系统似乎是如此分散,对我来说如此陌生:(。
PS:我已经决定使用Grunt,因为在WebStorm 8中有直接集成,但也许其他工具更适合这项任务?答案 0 :(得分:7)
有许多不同的解决方案,这就是为什么它似乎支离破碎。我将描述几种看似流行的方法。
使用grunt-usemin
您可以在HTML中指定它读取的块并将其提供给其他Grunt任务(concat,uglify等)。他们的文档有很多例子可以处理很多不同的场景。
使用模块捆绑包,例如grunt-webpack,grunt-browserify或grunt-contrib-requirejs
不要在HTML中添加脚本标记,而是使用require()
语法在需要时包含文件。根据方法,将脚本添加到页面或捆绑到单个文件中。这些方法通常只需要包含一个javascript文件。
探索并找出最适合您需求的解决方案。
答案 1 :(得分:1)
我通过在我的Gruntfile顶部添加此函数来解决这个问题:
var isCssRegex = /^\s*<\s*link.*href=["']([^"']*)["'].*$/i;
var isJsRegex = /^\s*<\s*script.*src=["']([^"']*)["'].*$/i;
var extractJsRegex = /src\s*=\s*"(.+?)"/
var extractCssRegex = /href\s*=\s*"(.+?)"/
function extractFilenames(src, type) {
var filenames = [];
var data = require('fs').readFileSync(src, 'utf8');
var lines = data.replace(/\r\n/g, '\n').split(/\n/);
var webContent = require('path').dirname(src);
lines.forEach(function (line) {
if (line.match(type === 'css' ? isCssRegex : isJsRegex)) {
var src = line.match(type === 'css' ? extractCssRegex : extractJsRegex)[1];
filenames.push(webContent + '/' + src);
}
});
return filenames;
};
然后在我的concat任务中,我可以这样做:
concat: {
js: {
src: extractFilenames('src/main/resources/public/index.html', 'js'),
dest: 'build/app.js'
},
css: {
src: extractFilenames('src/main/resources/public/index.html', 'css'),
dest: 'build/style.css'
}
},