Grunt usemin任务没有正确更新嵌套的相对路径

时间:2015-01-09 19:55:23

标签: gruntjs yeoman grunt-usemin minimatch

我有一个Yeoman项目搭建了“webapp-generator'它包含一个带有嵌套HTML文件的静态网站,类似于以下结构:

-root/
  index.html
    -directory/
       file1.html
    -directory2/
       file2.html
    -js/
       (revved .js files)
    -css
       (revved .css files)

我正在使用useminfilerev任务更新.html文档中的filerevved文件路径。它在js / css / images上正确更新所有文件名,并且它在根index.html上正常工作。 但是,在嵌套的HTML文件中,它不会替换对正确嵌套路径的引用。

例如。

js/scripts.js被重命名为js/827385.scripts.js

index.html

<scripts src="js/scripts.js"></scripts>

解析为:<scripts src="js/827385.scripts.js"></scripts>

但目录/ file1.html 中的(或任何其他嵌套的html文件)

<scripts src="../js/scripts.js"></scripts>

也会转换为:<scripts src="js/827385.scripts.js"></scripts>

忽略 ../ 相对路径


有没有办法调整Grunt任务以了解目录中文件的相对深度,以便将相对指示符../保留在重命名的路径中?。

以下是相关Grunt任务的代码段。

PS:我已经在Stack Overflow问题中跟踪了一些可能的答案:How should I configure grunt-usemin to work with relative path无济于事。

&#13;
&#13;
     // Renames files for browser caching purposes
    rev: {
        dist: {
          files: {
            src: [
              '<%= config.dist %>/scripts/{,**/}*.js',
              '<%= config.dist %>/styles/{,**/}*.css',
              '<%= config.dist %>/images/{,**/}*.*',
              '<%= config.dist %>/styles/fonts/{,**/}*.*',
              '<%= config.dist %>/*.{ico,png}'
            ]
          }
        }
      },

      // 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
      // <%= config.dist %>
      useminPrepare: {
        options: {
          dest: 'out',
          // root: '<%= config.app %>'
        },
        html: '<%= config.app %>/index.html'
          // root: '<%= config.app %>'
      },

      // Performs rewrites based on rev and the useminPrepare configuration
      usemin: {
        options: {
          assetsDirs: [
            '<%= config.dist %>',
            '<%= config.dist %>/images',
            '<%= config.dist %>/styles'
          ]
        },
        html: ['<%= config.dist %>/**/*.html'],
        css: ['<%= config.dist %>/styles/**/*.css']
      },
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:1)

就我而言,我发现问题是html文件中的usemin配置:

如果你的 index.html 这个usemin指令:

<!-- build:js styles/jquery.js -->
<script src="bower_components/jquery/dist/jquery.js"></script>
<!-- endbuild -->

目录/ file1.html 中,您应该尝试在其中使用完整路径:

<!-- build:js /scripts/jquery.js-->
<script src="../bower_components/jquery/dist/jquery.js"></script>
<!-- endbuild-->

将转换为<script src="/scripts/jquery.34ad31c3.js"></script>