EJS 包含原始部分而不渲染其内容

EJS Include raw partial without rendering its contents

我在 node.js 端使用 ejs 将部分(glsl 着色器)包含在 script 标记内的核心页面中。之后,我计划在客户端检索这些脚本标签的文本内容,并根据客户端变量在客户端使用 EJS 动态编译它们。

问题是在服务器端的初始 <%- include ... %> 期间 EJS 在着色器中连接了自己的语法并尝试编译它们,我想避免这种情况。

所以有什么方法可以将这些部分作为一个简单的原始文本块来包含,而不考虑其中任何可能的 EJS 语法?

核心.ejs:

<script type="x-shader/x-vertex" id="mandelbrotCalcVertexShader">
    <%- include shaders/mandelbrotCalcVertexShader.glsl %>
</script>
<script type="x-shader/x-fragment" id="mandelbrotCalcFragmentShader">
    <%- include shaders/mandelbrotCalcFragmentShader.glsl %>
</script>

所以,毕竟我对 ejs 源代码进行了一些改动,强制 ejs 仅编译那些具有 .ejs 扩展名的文件。其他按原样通过。
如果有人对特定编辑感兴趣 - 在 node_modules/ejs/lib 下的 ejs.js 中,您应该找到 function handleCache(options, template),底部有 return func;

将此 return 语句与以下条件交换:

if (~filename.indexOf(".ejs")) {
    return func;
} else {
    return function() {
      return template;
    };
}

瞧!

也许我会为这个东西做一个 PR 作为一个选项。我很惊讶我们不能在本地做到这一点。