gpt4 book ai didi

node.js - Metalsmith 静态站点页面缺少元数据

转载 作者:搜寻专家 更新时间:2023-10-31 23:05:20 25 4
gpt4 key购买 nike

我一直在尝试 tutorial设置 Metalsmith ,我已经完成了第 1 部分。

我已经安装了 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

当我使用它提供的 markdown 渲染器时

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

调试代码显示当它到达渲染器时 YAML front-matter缺少元数据。这似乎很重要,因为插件使用元数据来呈现页面。

最佳答案

解决的关键在于markdown渲染页面开头的三个奇怪字符



YAML front-matter警告:

UTF-8 Character Encoding Warning

If you use UTF-8 encoding, make sure that no BOM header characters exist in your files or very, very bad things will happen to Jekyll. This is especially relevant if you’re running Jekyll on Windows.

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

一个解决方案是让 IDE 停止将其保存为带有 BOM 的 utf8,但对我来说这不是一个可行的选择。

我创建了一个解决方法,即必须在任何其他 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;
});
})

关于node.js - Metalsmith 静态站点页面缺少元数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23930304/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com