2016-08-16 9 views
4

マークダウンファイル内でテンプレートコードを再利用できません。 たとえば、vimeoリンクの埋め込みコードを取得して、vimeo IDを呼び出しに渡したいとします。Nunjucksのpartials/macros/includesをmetalmith-in-placeで使うには?

一例マクロ:

{% 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 %} 

次のように使用する:

{{ vimeoEmbed(120394634) }} 

私が直接値下げファイルでマクロを定義する場合、これは動作します。しかしもちろん、私はグローバルファイルにマクロを付けてメンテナンスしやすくしたいと思います。

Nunjucks '{% import "macros.njk" as macros %}を使用しようとしました。 macros.njkにはvimeoEmbedマクロが含まれます。
残念ながら、私はError: template names must be a string: undefinedを手に入れています。

代わりに私は{% include "vimeoEmbed.njk" %}を使ってみましたが、私は同じError: template names must be a string: undefinedを得ています。


これはmetalsmith-layoutsとうまくNujucks' includeimport作品としてmetalsmith-in-placeに特異的であるように思われます。

マークダウンファイルとNunjucks内でコードを再利用するための他のソリューションも歓迎します。ありがとう!

答えて

2

私はそれを自分で考え出しました。

私の間違いは基本的にのmetalsmith-markdownプラグインの後に実行されました。 Markdownプラグインは既に{{ "some string" }}のような引用符を{{ &quot;some string&quot; }}に変換していました。 これを切り替えると、Markdownの前にインプレースが実行されています。

また、metalsmith-in-place2.0.0-beta.1に更新しました。現在はJSTransformerに依存しており、これ以上consolidate.jsには依存しません。 NunjucksトランスはのNujucksインクルードとインポートを持っているようですので、Nunjucksマクロからフィルターに切り替える必要もありました。 これが最初の問題を解決するかどうかは完全にはわかりませんが、おそらくそうです。

+0

こんにちは!金属師とnunjucksが一緒に働くように、どうやって管理しましたか? 'layouts'と' in-place'の両方を試しましたが、私が試したほとんどの設定で '.nj'ファイルを処理していません。あなたの設定を共有していただけますか?ありがとう! –

+0

Nunjucksの拡張子として '.njk'または' .nunjucks'を使用してください。 JSTransformerは、ファイル拡張子に応じて変圧器を自動的に一致させます。参照として[このリスト](https://github.com/jstransformers/inputformat-to-jstransformer/blob/master/dictionary.json)を見てください。 –

+0

ええ、ありがとう。私はソースコードを調べることでそれを理解しました。私は実際にこの件に関する記事を書いています:https://medium.com/@slavafomin/making-metalsmith-to-work-with-nunjucks-a67a74c3e73d –

関連する問題