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
时,我什么都没得到。没有进度指示,没有&#34;完成你的东西!&#34;消息,只是一个闪烁的命令提示行。我的构建目录为空。显然有些东西正在破裂,但没有要检查的日志,也没有谷歌的状态消息。我究竟做错了什么?不应该在build
目录中创建至少一个页面吗?
答案 0 :(得分: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;
});
答案 1 :(得分:1)
除了您已经识别的错误回调问题之外,我认为您在文件中遗漏了一些内容。诚然,Metalsmith非常简单,但它的简单性意味着许多功能(如模板支持)是由您需要安装和明确包含的模块带来的。
您说Calculate().Subscribe(resultWithProgress => {
if(resultWithProgress.Result == null) //Show progress using resultWithProgress.Progress
else // get the result
})
文件的内容是:
index.js
你所拥有的一切var Metalsmith = require('metalsmith');
Metalsmith(__dirname)
.destination('./build')
.build();
?如果您想使用Handlebars模板,则需要明确添加metalsmith plugin that handles templates,并指示它使用把手:
index.js
确保从npm安装var Metalsmith = require('metalsmith');
var templates = require('metalsmith-templates');
Metalsmith(__dirname)
.destination('./build')
.use(templates('handlebars'))
.build();
和metalsmith-templates
模块。
此外,您可能知道这一点,但在您的handlebars
中,您需要更改
index.hbt
到
<title>FOO</title>
从 <title>{{ title }}</title>
加载标题元数据。
请告诉我这是否可以帮到您,或者您是否需要更多帮助。