3

我正在尝试使用 metalsmith-in-place 对源目录的子目录中的文件进行一些就地模板化。它不起作用。模板标签不会被 frontmatter 替换。

我的构建脚本:

var Metalsmith = require('metalsmith'),
  inplace = require('metalsmith-in-place'),
  nunjucks = require('nunjucks');

Metalsmith(__dirname)
  .source('./source')
  .use(inplace({
    engine: 'nunjucks',
    pattern: '*.html',
    directory: 'source/deeper'
  }))
  .destination('./build')
  .build(function(err) {
    if (err) {
      console.log(err);
    }
    else {
      console.info('Built it.');
    }
  });

我的模板:

metalsmith_debug$ cat source/deeper/index.html
---
title: My pets
---

{{title}}

我的输出:

metalsmith_debug$ cat build/deeper/index.html

{{title}}

它适用于source; 但我需要它来处理子目录。

4

3 回答 3

3

现在接受的答案已经过时了,因为metalsmith-in-place切换到使用jstransformer框架而不是consolidate.

我写了一篇关于如何使用in-place插件将 Nunjucks 与 Metalsmith 配对的文章:

这是缩小的工作示例:

const Metalsmith = require('metalsmith');
const inPlace = require('metalsmith-in-place');

Metalsmith(__dirname)
  .source('./src')
  .destination('./build')
  .use(inPlace({
    pattern: '**/*.njk',
    engineOptions: {
      path: __dirname + '/src'
    }
  }))
  .build(function (error) {
    if (error) {
      throw error;
    }
  })
;
于 2017-11-18T12:40:52.083 回答
3

一些变化 build.js

var Metalsmith = require('metalsmith');
var inplace = require('metalsmith-in-place');
// var nunjucks = require('nunjucks');

Metalsmith(__dirname)
.source('./source')
.use(inplace({
    engine: 'nunjucks',
    pattern: '**/*.html' // modified pattern
    // directory: 'source/deeper' // Not needed
}))
.destination('./build')
.build(function(err) {
    if (err) {
        console.log(err);
    }
    else {
        console.info('Built it.');
    }
});
  1. 您不需要在构建文件中要求 nunjucks ,metalsmith-in-placeuses consolidate,这将在必要时要求它。(线可以去掉)
  2. pattern内修改inplace**/*.html. 有关详细信息,请参阅通配模式
  3. directory内不需要inplace。(线可以去掉)

...和一个小的变化source/deeper/index.html

---
title: My pets
---

{{ title }}
  1. 在占位符周围添加空间{{ title }}- Nunjucks似乎认为这很重要。

现在应该为你工作,如果没有,请告诉我。

于 2016-04-08T11:16:24.770 回答
1

patterninplace配置中应该很可能**/*.html不仅仅是*.html

于 2016-04-08T00:20:00.253 回答