这个metalmith-in-place构建脚本有什么问题?

时间:2016-04-07 23:06:27

标签: nunjucks metalsmith

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

我的构建脚本:

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中的文件;但我需要它来处理子目录。

3 个答案:

答案 0 :(得分: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-place使用consolidate,这将在必要时需要它。 (可以删除行)
  2. pattern内的inplace修改为**/*.html。有关详细信息,请参阅Globbing patterns
  3. directory内不需要
  4. inplace。 (可以删除行)
  5. ...以及对source/deeper/index.html的轻微更改:

    ---
    title: My pets
    ---
    
    {{ title }}
    
    1. 在占位符周围添加了空格{{ title }} - Nunjucks似乎认为这很重要。
    2. 现在应该为你工作,如果没有,请告诉我。

答案 1 :(得分: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;
    }
  })
;

答案 2 :(得分:1)

pattern配置中的inplace最有可能是**/*.html,而不仅仅是*.html