1

Metalsmith 将自己描绘成一个简单得可笑的静态站点生成器。我正在尝试编写最基本的网站,只是为了让自己熟悉软件的基础知识,但我似乎无法构建。这是我的文件夹结构:

|- build/
|- index.js
|- src/
    |-index.html
|- templates
    |-index.hbt

我的index.js文件:

var Metalsmith = require('metalsmith');

Metalsmith(__dirname)
    .destination('./build')
    .build();

我的index.html文件:

---
title: Home
template: index.hbt
---

还有我的index.hbt模板:

<!doctype html>
<html>
    <head>
        <title>FOO</title>
    </head>
    <body>
        something
    </body>
</html>

我的理解是,该build命令应该查看src目录并解析它找到的任何文件,其中包含顶部的 YAML 内容。所以它应该看一下index.html,看看它使用templates/index.hbt模板渲染,基本上只是将文件移动到build/index.html. 但是当我跑步时,我node index.js什么也得不到。没有进度指示器,没有“完成构建你的东西​​!” 消息,只是一个闪烁的命令提示行。我的构建目录是空的。显然有些东西坏了,但没有要检查的日志,也没有状态消息给谷歌。我究竟做错了什么?目录中不应该至少创建一个页面build吗?

4

2 回答 2

2

在所有地方的教程评论中找到了答案:https ://blog.robinthrift.com/2014/04/14/metalsmith-part-1-setting-up-the-forge/ 。它也在 github 示例中:https ://github.com/segmentio/metalsmith

根据这些链接,您需要在.build()函数中包含错误回调:

Metalsmith(__dirname)
    .build(function(err) {
        if (err) throw err;
    });
于 2015-05-05T22:04:19.667 回答
1

除了您已经确定的错误回调问题之外,我认为您的文件中还缺少一些内容。诚然,Metalsmith 非常简单,但它的简单性意味着许多功能(例如对模板的支持)是由您需要明确安装和包含的模块带来的。

你说你的index.js文件内容是:

var Metalsmith = require('metalsmith');

Metalsmith(__dirname)
    .destination('./build')
    .build();

这就是你所拥有的一切index.js吗?如果要使用 Handlebars 模板,则需要显式添加处理模板的 metalsmith 插件,并指示它使用车把:

var Metalsmith = require('metalsmith');
var templates = require('metalsmith-templates');

Metalsmith(__dirname)
    .destination('./build')
    .use(templates('handlebars'))
    .build();

并确保从 npm安装metalsmith-templates和模块。handlebars

此外,您可能知道这一点,但在您的index.hbt,您需要更改

    <title>FOO</title>

    <title>{{ title }}</title>

为了从index.html.

让我知道这是否能让您继续前进,或者您是否需要更多帮助。

于 2015-06-20T23:33:56.977 回答