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 作为一个选项。我很惊讶我们不能在本地做到这一点。
我在 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 作为一个选项。我很惊讶我们不能在本地做到这一点。