如何指示grunt HTMLmin忽略PHP标记

时间:2014-01-12 21:10:36

标签: javascript php html gruntjs

我在grunt.js工作流程中使用HTMLmin来缩小我的HTML。

我有一些文件也包含PHP标记。例如:

<a href="<?php echo //code ?>">link</a>

HTMLmin无法正确解析此错误,而是抛出异常错误:

Warning: [filename]
Parse Error: <a href="<?php echo //code ?>">link</a>
Aborted due to warnings.

是否有指示HTMLmin忽略PHP标记?我查看了文档,但没有看到任何明显的答案。

1 个答案:

答案 0 :(得分:0)

现代JS的世界并没有考虑在经过任何类型的服务器端操作的子目录或模板中运行。诀窍是在 grunt使用某种data- *属性缩小之后注入PHP 。我还没有找到一个我非常满意的解决方案。但是,你可以尝试一些grunt正则表达式任务来做这样的事情

<a data-phphref="<?= $templatePrefix;?>" data-phpclass="<?= $activeLink;?>" href="/foo/">Foo</a>

自定义grunt任务后

<a href="<?= $templatePrefix;?>/foo/" class="<?= $activeLink;?>">Foo</a>

或者你可以做完整的DOM操作,这可能是更好的长期选择。

更新

我猜这是第三种选择,那就是更换令牌以使正则表达式更容易。您可以在ui-src等目录中查看源模板文件/当发生更改时,运行简单的搜索/替换令牌

<a href="{{templatePrefix}}/foo/">Foo</a>

输出到PHP配置使用的模板目录。这应该可以让你像

一样缩小
<!-- build:js {{templatePrefix}}scripts/plugins.js -->
<script type="application/javascript" src={{templatePrefix}}components/bootstrap/js/affix.js"></script>
<!-- endbuild -->

执行如下的繁琐任务:

      "string-replace": { 
        template: { 
            files: { "./": "<%= yeoman.dist %>/*.html.php"},
            options: { 
              replacements:[ { 
                  pattern: /{{templatePrefix}}/,
                  replacement: "<?= $templatePrefix;?>"
              }
            ]
            }
        },

奖励是将PHP代码片段放入JS配置文件中,这样您的PHP代码就不会遍及Gruntfile.js

第二次更新

执行此操作的首选方法是在构建期间使用grunt-usemin注入PHP代码。最近发布的usemin 2.3.0具有blockReplacements的这种能力。

功能请求:https://github.com/yeoman/grunt-usemin/pull/337 提交:https://github.com/yeoman/grunt-usemin/commit/83f6821a30020cbc9395d7257e0276cff142e219

基本上,你不能让grunt忽略PHP,但你可以使它与PHP一起工作。