把手包裹 <!DOCTYPE html>

Handlebars wraps <!DOCTYPE html>

我正在尝试让我的 metalsmith 设置正常工作,没什么特别的。

在我的 build.js 我有:

…
handlebars.registerHelper('doctype', function() {
  return new handlebars.SafeString('<!DOCTYPE html>');
});
…

在我的部分模板中 header.hbt 我有:

{{doctype}}
<html>
…

结果 html 开头为:

<p>&lt;!DOCTYPE html&gt;</p>

– 这显然不是我需要的。

有什么建议吗?

PS。在我的布局文件中使用普通文档类型定义具有相同的效果。使用 handlebars ^4.0.5.

编辑 1: 经过一番尝试,我可以提供另一个症状:如果 SafeString() 调用的结果放在 <html> 块之前,它似乎被包裹在 <p> 标记中。这不是文档类型声明所特有的,»normal« html 元素似乎也受到影响。

编辑 2: 现在我已经为 safeString():

的功能提炼了 2x2 个案例

a) <html> 块内的 常规 元素(例如 <div>)按预期呈现,没有变化。

b) <html> 块之前的 常规 元素呈现正常,但放置在 <p> 标签内。

c) <html> 块中的 doctype 元素呈现为纯文本,如下所示:&lt;!DOCTYPE html&gt;

d) <html> 块之前的 doctype 元素将以相同的方式呈现,但包装在 <p> 元素中。

似乎是 metalsmith 相关的问题,而不是 handlebars 所固有的。给定的 (错误!) 插件调用顺序会导致问题:在调用 use(markdown(…)) 之前调用 use(layouts(…)) 是原因。 (所以可能是 markdown 插件进行了包装。)很抱歉给您带来麻烦。