Grunt - html minifier任务失败

时间:2016-06-17 15:41:21

标签: javascript gruntjs

我正在使用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文件,但没有一个被缩小,我甚至看不到错误。我在这里缺少什么?

1 个答案:

答案 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' } 将被解释为目标文件路径。

为了您按照预期的方式使用srcsrc属性,您必须使用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/**