Использование nunjucks включает в себя Metalsmith-in-place, вызывающую ошибку рендеринга

Я использую Metalsmith с Nunjucks для создания статического веб-сайта.

У меня нет проблем с созданием веб-сайта, похожего на блог, то есть с созданием макета, в который я мог бы обернуть некоторый контент с уценкой, используя плагин metalmith-layout.

Но я хотел бы создать несколько представлений, которые:

  • использовать макет (с фронтальной частью или с методом расширения)
  • использовать некоторые компоненты / части / макросы, сделанные вручную

Например, index.njk:

{% extends "layouts/base.njk" %}

{% block content %}

Hello World!

{% include components/test1.njk %}

{% include components/test2.njk %}

{% include components/test3.njk %}

{% endblock %}

Я пробовал использовать плагин metalmisth-in-place с:

.use(inplace({
    engineOptions: {
        path: __dirname + '/src/templating'
    }
})

но у меня ошибка: The Transform "nunjucks" does not support rendering synchronously

Кажется, что inplace () не может правильно отобразить включение ...

Любая идея ?


person Thibault    schedule 12.04.2018    source источник


Ответы (1)


Хорошо, у меня был отличный ответ и объяснение по поводу слабости слесарей по металлу.

Во-первых, структура папок должна быть примерно такой:

layouts/
    base.njk
components/
    test.njk
partials/
    head.njk
src/
    index.njk

Причина в том, что папка src должна собирать только основное содержимое, все файлы nunjucks только добавляют к этому содержимому.

Тогда с этой конфигурацией достаточно простого .use(inplace()). Параметр directory может быть добавлен, если каталог отличается от ./layouts.

При такой настройке этот index.njk отлично работает:

{% extends "./layouts/base.njk" %}

{% block content %}

Hello World!
{% include './components/test.njk' %}

{% endblock %}

С макетом base.njk:

<!doctype html>
<html class="" lang="">

  {% include '../partials/head.njk' %}

  <body>

    {% block content %}{% endblock %}

  </body>

</html>

Однако будьте осторожны, как мне сказали:

  • файлы из папки src преобразуются в объект «Файлы металлургов» и, таким образом, считываются оттуда, то есть в память, а не непосредственно с диска. Это означает, что nunjucks не могут разрешить относительный путь внутри этой папки, поэтому include в index.njk имеет абсолютный путь: './components/test.njk'
  • файлы за пределами папки src не преобразуются в объекте "Файлы металлургов" и, таким образом, считываются непосредственно с диска. В этом случае нунджаки могут разрешить относительный путь, поэтому у include есть такой путь '../partials/head.njk'

Надеюсь, я объясню это и хорошо понял ^^

Большое спасибо "ismay" за то, что уделили мне время, чтобы помочь мне справиться со слабостью в Metalsmith.

person Thibault    schedule 12.04.2018