2016-08-16 2 views
4

Ich habe Probleme bei der Wiederverwendung von Vorlagencode in meinen Markdown-Dateien. Zum Beispiel möchte ich den Einbettungscode für Vimeo-Links abrufen und einfach die Vimeo-ID an den Anruf übergeben.Wie benutzt man die Teiltöne/Makros/Includes von Nunjucks mit der Schmiede vor Ort?

Ein Beispiel Makro:

{% macro vimeoEmbed(id) %} 
    <iframe src="https://player.vimeo.com/video/{{ id }}?title=0&byline=0&portrait=0" width="300" height="169" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe> 
{% endmacro %} 

Um wie folgt verwendet werden:

{{ vimeoEmbed(120394634) }} 

Dies funktioniert, wenn ich das Makro in der Abschlags-Datei direkt zu definieren. Aber natürlich hätte ich gerne eine globale Datei mit dem Makro für einfachere Wartung.

Ich habe versucht, Nunjucks '{% import "macros.njk" as macros %} zu verwenden. macros.njk würde das vimeoEmbed Makro enthalten.
Aber leider bekomme ich immer Error: template names must be a string: undefined.

Als Alternative habe ich versucht mit {% include "vimeoEmbed.njk" %}, aber ich bekomme das gleiche Error: template names must be a string: undefined.


Dies scheint mit metalsmith-layouts-metalsmith-in-place als Nujucks' include und import gut funktionieren spezifisch.

Jede andere Lösung zur Wiederverwendung von Code in Markdown-Dateien und Nunjacks ist ebenfalls willkommen. Vielen Dank!

Antwort

2

Ich habe es selbst herausgefunden.

Mein Fehler war im Grunde zu metalsmith-in-place nach dem metalsmith-markdown Plugin laufen. Das Markdown-Plugin hatte bereits die Anführungszeichen beispielsweise in {{ "some string" }} in {{ &quot;some string&quot; }} umgewandelt. Ich schalte das so, dass In-Place vor Markdown läuft. In der Zwischenzeit habe ich auch metalsmith-in-place auf 2.0.0-beta.1 aktualisiert Es stützt sich jetzt auf JSTtransformer und nicht auf consolidate.js. Da der Nunjucks-Trafo anscheinend einen issue mit Nujucks enthält und importiert habe, musste ich auch von Nunjucks-Makros auf Filter umstellen. Also ich bin mir nicht ganz sicher, ob das das ursprüngliche Problem lösen würde, aber es ist wahrscheinlich.

+0

Hallo! Wie hast du es geschafft, dass Metalschmied und Nunjacks zusammenarbeiten? Ich habe sowohl "Layouts" als auch "In-Place" ausprobiert, aber sie verarbeiten die '.nj' Dateien in den meisten Konfigurationen, die ich ausprobiert habe, überhaupt nicht. Könnten Sie bitte Ihre Konfiguration teilen? Vielen Dank! –

+0

Stellen Sie sicher, dass Sie '.njk' oder' .nunjucks' als Erweiterung für Nunjucks verwenden. JSTransformer stimmt die Transformatoren abhängig von den Dateierweiterungen automatisch ab. Sehen Sie sich [diese Liste] (https://github.com/jstransformers/inputformat-to-jstransformer/blob/master/dictionary.json) als Referenz an. –

+0

Ja, danke. Ich habe das herausgefunden, indem ich den Quellcode durchgesehen habe. Ich habe einen Artikel zu diesem Thema geschrieben: https://medium.com/@slavafomin/making-metalsmith-to-work-with-nunjucks-a67a74c3e73d –