javascript - Pug/Jade 中动态包含的解决方法

标签 javascript node.js templates pug pugjs

我了解 Pug 不支持模板中的动态包含或扩展。即

extend path/to/template 

有效但无效

extend #{dynamic_path_to_template}

是否有一种解决方法(无论多么复杂)可以实现在运行时修改 View 使用的模板的相同目标

上下文:我的用例是我正在开发一个 npm 模块,并且用于扩展其他 View 的模板位于该模块内部。模块发布并安装后,将定义路径(即node_modules/my_module/path/to/template),但在开发阶段,我只需要能够“npm link”到模块并使模板工作。我也不想对链接进行硬编码,这样我就可以发布与测试相同的代码。

最佳答案

我也遇到了这个问题,并在寻找解决方案时发现了这个问题。我的解决方案类似于 Nikolay Schambergs 的答案,但我认为我应该分享它。

我创建了一个函数,通过给定路径并将其传递给选项对象来呈现模板。也许它对你的情况也有帮助

const includeFunc = (pathToPug, options = {}) => {
    return pug.renderFile(pathToPug, options); //render the pug file
}

const html = pug.renderFile('template.pug', {include: includeFunc});

然后在模板中按如下方式使用它:

body
  h1 Hello World
  |!{include(dynamicPugFilePathFromVariable)}

关于javascript - Pug/Jade 中动态包含的解决方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45824697/

相关文章:

具有模板作为参数的类的 C++ 成员函数特化

没有足够模板参数的 C++ 函数调用

javascript - 如何使 JavaScript 函数中的文本居中?

javascript - await 是 async 函数内部的保留字错误

javascript - 如果没有参数,node.js next() 中间件函数如何工作?

javascript - 如何在 Javascript 中获取 C# 枚举

jquery - jquery ui datetimepicker 不起作用(node.js + ejs + Express)

node.js - Gitlab CI/CD 管道给出 Dockerfile 错误

node.js - 如何从 Node 命令行运行去抖函数?

c++ - 嵌套模板类特化的语法