4

我正在尝试让我的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。在我的布局文件中使用普通的 doctype 定义具有相同的效果。使用handlebars ^4.0.5.

编辑1: 尝试了一下之后,我可以提供另一个症状:如果将调用的结果放在块之前,它SafeString()似乎被包装在标签中。这并非特定于 doctype 声明,»normal« html 元素似乎也受到影响。<p><html>

编辑 2: 现在我已经提炼了 2x2 案例以实现以下功能safeString()

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

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

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

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

4

1 回答 1

2

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

于 2016-04-08T09:53:39.023 回答