【问题标题】:cant replace HTML base tag with grunt-usemin's custom blockReplacements无法用 grunt-usemin 自定义块替换 HTML 基本标记
【发布时间】:2016-03-05 08:06:05
【问题描述】:

我正在尝试将 HTML 基本标记的 href 属性值替换为 /mydir/。已尝试使用 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']
      ]
    }

  }
}

我调用 usemin 的 html:

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

我正在跑步:

$ grunt serve:dist

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

我也尝试过运行调试来触发 grunt.log.debug 调用 buildReplace 函数:

$ grunt --debug serve:dist

但是没有控制台输出。

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

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

【问题讨论】:

  • 不是base而不是baseUrl吗?

标签: gruntjs grunt-usemin angular-fullstack


【解决方案1】:

您必须使用以下命令: 咕噜构建

【讨论】:

    【解决方案2】:

    在无处可去之后,我已经有一段时间没有回到这个问题了。刚刚重新审视,似乎从 grunt-usemin": "~2.1.1" 升级到 grunt-usemin": "3.0.0" 解决了这个问题。仍然不确定在 3.0.0 中是否解决了特定错误

    另外注意:Gruntfile 中的 baseUrl 被分配了一个函数,第一个参数是块:

    baseUrl: function (block) {
        grunt.log.debug("******************* blockReplacements *******************");
        return '<base href="/mydir/">';
    }
    

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

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

    如果您删除 /mydir/ url 部分,则以下内容将无法创建基本标签:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-24
      • 2023-03-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多