【问题标题】:EJS Include raw partial without rendering its contentsEJS 包含原始部分而不呈现其内容
【发布时间】:2017-03-15 21:42:37
【问题描述】:

我在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 文件?
  • 不,是.glsl
  • 请提供您的代码示例。我的印象是.glsl 不在脚本标签中。
  • @lbu 嗯,不知道你在哪里,但在这里。这就是我所说的他们在脚本标签中的意思。
  • 在这种情况下,我唯一能想到的就是使用readFileSync 之类的东西来获取变量中的文件内容,并将其打印在每个 glsl 的正确位置。跨度>

标签: javascript ejs


【解决方案1】:

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

用以下条件交换这个返回语句:

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

瞧!

也许我会为这件事做一个公关作为一个选项。我很惊讶我们不能在本地做到这一点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-04
    • 1970-01-01
    • 2013-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多