在 metalsmith 中注册自定义车把助手

register custom handlebar helper in metalsmith

我正在使用 Metalsmith 从降价文件生成静态站点。

编辑 markdown 文件的人会写:{{{link "docs/file.docs"}}} 并且他们希望网站上有那个文件的 link(相对 link)

这个助手很简单,我测试过它可以工作:

handlebars.registerHelper('link', function(path) {
  var url = handlebars.escapeExpression(path);

  return new handlebars.SafeString(
    "<a href='" + url + "'>" + url + "</a>"
  );
});

但是我如何添加这个助手并在我的 metalsmith 配置中使用它?

这里是一个总结的例子。
index.md:

etc etc link to the page is {{{link "docs/file.doc"}}}

我想用一个简单的 make 创建 html 的以下部分:

etc etc link to the page is <a href='docs/file.doc'>docs/file.doc</a>

我在这里找到了答案:https://segment.com/blog/building-technical-documentation-with-metalsmith/

这是我的 index.js Metalsmith 配置:

var Metalsmith  = require('metalsmith');
var markdown    = require('metalsmith-markdown');
var permalinks  = require('metalsmith-permalinks');
var handlebars = require('handlebars');
var inplace = require('metalsmith-in-place');

handlebars.registerHelper('link', function(path) {
  var url = handlebars.escapeExpression(path);

  return new handlebars.SafeString(
    "<a href='" + url + "'>" + url + "</a>"
  );
});

Metalsmith(__dirname)
  .metadata({ title: "Static Site" })
  .source('./src')
  .destination('/var/www')
  .use(inplace({ engine: 'handlebars', pattern: '**/*.md' }))
  .use(markdown())
  .build(function(err, files) {
    if (err) { throw err; }
  });