не могу получить очень простую установку по металлу для создания страниц

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?


person mounty    schedule 05.05.2015    source источник


Ответы (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;
    });
person mounty    schedule 05.05.2015
comment
Я лично делаю больше... вывожу ошибки в билд лог. Таким образом, я могу увидеть их позже. - person James Khoury; 07.05.2015
comment
Это хорошая идея, @JamesKhoury. Мне придется это реализовать. Спасибо! - person mounty; 11.05.2015
comment
Если да, не могли бы вы поделиться им с нами? Я хотел бы увидеть, как вы это делаете в сравнении. - person James Khoury; 12.05.2015
comment
Похоже, он изменил свои правила mod_rewrite. Обновил по новой ссылке, правда комментариев уже нет. - person mounty; 25.07.2016

В дополнение к проблеме с обратным вызовом ошибки, которую вы уже определили, я думаю, что вы упускаете несколько вещей в своих файлах. Действительно, Metalsmith очень прост, но его простота означает, что многие функции (например, поддержка шаблонов) обеспечиваются модулями, которые необходимо установить и включить в явном виде.

Вы говорите, что содержимое вашего index.js файла:

var Metalsmith = require('metalsmith');

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

Это все, что у тебя есть index.js? Если вы хотите использовать шаблоны Handlebars, вам необходимо явным образом добавить плагин для работы с шаблонами и указать ему использовать руль:

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

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

И убедитесь, что вы установили модули metalsmith-templates и handlebars из npm.

Кроме того, вы, вероятно, знаете это, но в вашем index.hbt вам нужно изменить

    <title>FOO</title>

to

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

чтобы загрузить метаданные заголовка из index.html.

Дайте мне знать, если это поможет вам, или если вам нужна дополнительная помощь.

person Guillaume Paumier    schedule 20.06.2015
comment
кстати, плагин metalsmith-template устарел и разделен на 2 разных плагина metalsmith-layout и metalsmith-in-place - person Bchavez.gd; 06.08.2015