现代 JS 的世界并没有考虑在子目录中运行或经过任何类型的服务器端操作的模板。诀窍是用某种 data-* 属性注入 PHP after grunt minifies。我还没有开发出我完全满意的解决方案。但是,你可以尝试一些 grunt regex 任务来做这样的事情
<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 代码 sn-ps 放入一个 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 一起工作。