【问题标题】:Rendering from strings instead of files with MarkoJS使用 MarkoJS 从字符串而不是文件进行渲染
【发布时间】:2020-12-19 10:26:40
【问题描述】:

我正在为我的电子邮件模板使用 markojs,但现在我们正在将这些模板移动到我们的数据库中以在线编辑它们。 我们仍然需要使用 marko 来保持我们完整的 HTML 结构和变量行为。

我找到了 2 种方法来获取模板作为字符串,如 renderSync() 方法,但它需要模板在之前或 compile() 之前作为文件存在,但我不知道如何使它与变量处理一起使用。

【问题讨论】:

    标签: templates email-templates marko


    【解决方案1】:

    您可以使用 Marko 的 load 方法编译模板并取回模板实例,然后您可以渲染该实例以获得最终的 HTML:

    const template = require("marko").load(templatePath, templateSource, compilerOptions);
    const html = template.renderSync(data);
    

    您可能不需要传递任何 custom compilerOptions 并且可以省略最后一个参数。

    即使您的模板在磁盘上不存在,您仍然需要将templatePath 传递到带有虚拟.marko 文件的真实目录。例如,您可以这样做:

    const templatePath = path.join(__dirname, `${database.id}.marko`);
    

    templatePath 有两个用途:

    1. 作为节点require 缓存的键。如果您多次请求编译相同的文件名,您将获得原始编译。这可能意味着您需要在编辑模板时清除 require 缓存:delete require.cache[templatePath];
    2. 发现自定义 Marko 标签。如果您有打算由电子邮件模板使用的自定义标签/组件,则应确保 templatePath allows those tags to be discovered 指定的路径。

    【讨论】:

      猜你喜欢
      • 2014-02-28
      • 2013-07-11
      • 2015-04-15
      • 2014-11-27
      • 2023-02-21
      • 2022-06-25
      • 2017-04-26
      • 2022-11-18
      • 2018-04-22
      相关资源
      最近更新 更多