我正在使用grunt-contrib-htmlmin
来处理我的HTML文件。
我为node_modules
目录添加了一个例外,因此我的Gruntfile.js
看起来像这样:
module.exports = function(grunt) {
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
htmlmin: {
prod: {
options: {
removeComments: true,
collapseWhitespace: true
},
files: {
src: ['**/*.html', '!node_modules/'],
dest: 'prod/'
}
}
}
});
grunt.loadNpmTasks('grunt-contrib-htmlmin');
当我运行grunt build
时,我在控制台中获得的结果是:
运行“htmlmin:prod”(htmlmin)任务
缩小1个文件(1个失败)
完成,没有错误。
我有4个HTML文件,但没有一个被缩小,我甚至看不到错误。我在这里缺少什么?
答案 0 :(得分:1)
我无法重现您的特定错误,但我确实发现您的grunt配置存在问题。
首先,在使用Files Object Format时,指定src-dest映射,其中目标路径为键,源路径(或源路径数组)为值。例如:
myStr = "loremipsum5lorem";
function check(str) {
var x = /[^a-zA-Z]/, reason;
var match = str.search(x);
if (match > -1) reason = match;
return reason ? "character that is not a-zA-Z found at " + reason : true
};
console.log(check(myStr));
使用当前配置,files: {
'prod/minified.html': 'src/unminified.html'
}
将被解释为目标文件路径。
为了您按照预期的方式使用src
和src
属性,您必须使用Files Array Format。
dest
不幸的是,这还不能让我们达到预期的产量。我们需要解决一些问题:
files: [{
src: ['**/*.html', '!node_modules/'],
dest: 'prod/'
}]
被解释为单个目标路径,而不是预期的前缀。我们需要通过在我们的文件对象上设置prod/
来告诉build our files object dynamically咕噜声。
接下来,我们需要在我们的文件配置中设置expand: true
,以告诉grunt在计算目标文件路径时去除源文件路径的路径。
第三,模式flatten: true
将仅豁免一个精确的匹配,字面意思是“node_modules /”。要免除node_modules文件夹下的所有文件,我们必须使用globstar匹配模式!node_modules/
。
我们的结果如下:
!node_modules/**