Metalsmith静态网站页面缺less元数据

我一直在尝试一个教程来build立Metalsmith ,我已经到了第一部分的末尾。

我已经安装了node.js和模块。 IDE是安装了Node.js工具的Visual Studio 2013。 我已经把一个基本的结构,我试图让一个单一的页面呈现与模板。

这些指示告诉把以下内容放入一个文件中:

--- title: Home template: home.hbt --- This is your first page 

使用如下模板:

 <!doctype html> <html lang="en"> <head> <meta charset="UTF-8" /> <title>{{ title }} | Metalsmith Page</title> </head> <body> <div class="main-wrapper"> {{{ contents }}} </div> </body> </html> 

本教程说,它应该渲染到一个HTML页面,但我得到的结果是这样的:

 --- title: Home template: home.hbt --- This is your first page 

当我使用降价渲染器,它给

 <p>--- title: Home</p> <h2 id="template-home-hbt">template: home.hbt</h2> <p>This is your first page</p> 

debugging代码显示,当它到达渲染器时, YAML前端元数据丢失。 这似乎很重要,因为插件使用元数据来呈现页面。

解决scheme的关键在于降价呈现页面开始时的三个奇怪的字符

  

和YAML的前置警告:

UTF-8字符编码警告

如果您使用UTF-8编码,请确保文件中不存在BOM标题字符,否则Jekyll会发生非常非常糟糕的情况。 如果您在Windows上运行Jekyll,这尤其相关。

查看Node.js中加载的缓冲区,显示了utf8 BOM字符。

一种解决scheme是让IDE停止使用BOM保存为utf8,但对我来说这不是一个可行的select。

我创build了一个解决方法,作为一些必须在任何其他metalsmith插件之前运行的小行。

 var stripBom = require('strip-bom'); var front = require('front-matter'); var extend = require('extend'); // **snip** .use(function __utf8BOM_workaround(files, metalsmith, done) { setImmediate(done); Object.keys(files).forEach(function (file) { var data = files[file]; var parsed = front(stripBom(data.contents.toString())); data = extend({}, data, parsed.attributes); data.contents = new Buffer(parsed.body); files[file] = data; }); })