3

我有一个相当典型的 PHP 项目,其中页面的页眉/页脚部分被重用,因此放在单独的文件中,我只是require从主文件。

但是,这意味着我的_header.php-file 以打开<article>标记结尾(然后在 开头“关闭” _footer.php)。

问题是我将其解释为htmlmin错误并在. 我该如何“禁用”它?我已经阅读了grunt-contrib-htmlminhtml-minifier的 GitHub 页面,但运气不佳。articlebodyhtml_header.php

我的任务配置

htmlmin: {                                      
    dist: {                                     
        options: {   
            minifyJS: true,
            removeComments: true,
            collapseWhitespace: true
        },
        files: {                                
            'staging/index.php': 'index.php',
            'staging/support/index.php': 'support/index.php',
            'staging/inc/_header.php': 'inc/_header.php',
            'staging/inc/_footer.php': 'inc/_footer.php'
        }
    }
}

如果您还可以告诉我为什么minifyJS: true似乎被忽略了,则可以加分

谢谢。

4

3 回答 3

1

我知道不理想的一种解决方案是通过将标记包装在以下内容中来使用忽略注释:

<!-- htmlmin:ignore -->

https://github.com/kangax/html-minifier#ignoring-chunks-of-markup

或者您可以使用其他工具,例如 HTML Clean:

https://www.npmjs.com/package/grunt-htmlclean

于 2015-02-19T17:44:09.957 回答
0

我搜索了解决方案,查看了文档,阅读了几篇博客文章,我发现此时您所问的是不可能的。

此外,有人在 GitHub 上提出了类似的问题Support for html Fragments,但答案是:

嗯,我认为我们对此无能为力,因为 minifier 确实需要了解上下文并且无法理解如何处理任意的部分 html 块。

所以这是不可能的,而且(可能)将来不会实施

不能阻止该过程(使用 grunt-contrib-htmlmin),因为它们的目的是专门防止用户留下“不正确的代码”。

我没有找到任何其他等效的 grunt-plugin 可以为您提供这种可能性。

最后,我认为您只剩下两个“解决方案”:

1)不缩小你的 php 片段;

2)将您的代码分成更多部分,只缩小没有未闭合标签的部分,然后使用grunt-include-replace或类似插件将它们重新组合到一个新的 php 文件中。

于 2014-07-15T23:22:26.930 回答
0

我遇到了同样的问题,并结合使用和修复了htmlmin:ignoreincludeAutoGeneratedTags

咕噜声

htmlmin: {
    dist: {
      options: {
          removeComments: true,
          includeAutoGeneratedTags: false,
          collapseWhitespace: true,
          conservativeCollapse: true, 
   },
   files: [
        { src: ['<%= meta.deployPath %>/includes/footer.php'], dest: '<%= meta.deployPath %>/includes/footer.php', nonull: true},
      ]
     }
    },

页脚.php

<!-- htmlmin:ignore --></div><!-- htmlmin:ignore -->
<footer id="page-footer" role="contentinfo">
...
于 2020-05-26T15:02:37.920 回答