无法用grunt-usemin的自定义blockReplacements替换HTML基本标记

时间:2016-03-05 08:06:06

标签: gruntjs grunt-usemin angular-fullstack

我尝试用/ mydir /替换HTML基本标记的href属性值。尝试使用grunt-usemin的blockReplacements。

这是配置

// Reads HTML for usemin blocks to enable smart builds that automatically
// concat, minify and revision files. Creates configurations in memory so
// additional tasks can operate on them
useminPrepare: {
  html: ['<%= yeoman.client %>/index.html'],
  options: {
    dest: '<%= yeoman.dist %>/public'
  }
},

// Performs rewrites based on rev and the useminPrepare configuration
usemin: {

  html: ['<%= yeoman.dist %>/public/{,*/}*.html'],
  css: ['<%= yeoman.dist %>/public/{,*/}*.css'],
  js: ['<%= yeoman.dist %>/public/{,*/}*.js'],
  options: {
    assetsDirs: [
      '<%= yeoman.dist %>/public',
      '<%= yeoman.dist %>/public/assets/images'
    ],
    blockReplacements: {
      baseUrl: function (block) {
        grunt.log.debug("******************* blockReplacements *******************");
        return '<base href="/mydir/">';
      }
    },

    // This is so we update image references in our ng-templates
    patterns: {
      js: [
        [/(assets\/images\/.*?\.(?:gif|jpeg|jpg|png|webp|svg))/gm, 'Update the JS to reference our revved images']
      ]
    }

  }
}

我的html正在调用usemin:

<!-- build:baseUrl /mydir/ -->
<base href="/">
<!-- endbuild -->

我正在跑步:

$ grunt serve:dist

但是这只删除了基本标签而没有替换。 我怀疑我需要在Gruntfile中配置baseUrl属性,但我没有尝试rev / uglify文件,并且相信这个属性会指向需要reving等的文件。

此外,我已经尝试运行调试来解雇grunt.log.debug调用buildReplace函数:

$ grunt --debug serve:dist

但是没有控制台输出。

注意:我的应用程序基于角度fullstack生成器应用程序。 https://github.com/angular-fullstack/generator-angular-fullstack

任何帮助或建议表示赞赏。

2 个答案:

答案 0 :(得分:0)

您必须使用此命令: grunt build

答案 1 :(得分:0)

在没有得到任何地方后,我暂时没有回到这个问题。刚刚重新访问,似乎从grunt-usemin“:”~2.1.1“升级到grunt-usemin”:“3.0.0”解决了这个问题。仍然不确定是否有特定的错误是在3.0.0中修复此问题的地址

另请注意:Gruntfile中的baseUrl被赋予一个第一个参数为block的函数:

InputStream

这个名为block的参数实际上并没有在函数中使用,href返回是一个字符串(我知道这很糟糕,不应该这样使用,但只是在这里指出一些东西)。在client / index.html中对此函数的调用必须有一个传递给它的参数:

ApplicationContext

如果你带走/ mydir / url部分,以下将无法创建基本标记:

ApplicationContext.getBeanDefinitionNames()

所以实际上我们可以添加/ some-rubbish-url-portion /并且它不会失败并且不会对基本标记的结果产生任何影响。