2015-09-27 56 views
4

我正在为我的Gulp流程添加一些简单的Markdown处理,但我无法完全理解这些部分。我似乎错过了获取前端内容和确定要应用哪个Nunjuck模板之间的步骤。Gulp Front Matter +通过Nunjucks降价

下面是我咕嘟咕嘟文件中的部分:

gulp.task('pages:md', function() { 
    gulp.src('./content/**/*.md') 
    .pipe(frontMatter({ // optional configuration 
     property: 'frontMatter', // property added to file object 
     remove: true // should we remove front-matter header? 
    })) 
    .pipe(marked({ 
     // optional : marked options 
    })) 
    .pipe(nunjucks({ 
     // ?? Feels like I need to specify which template applies based on the front matter "layout" property? 
    })) 
    .pipe(gulp.dest('build/')) 
}); 

降价文件看起来是这样的:

--- 
title: Title 
layout: layout.html 
nav_active: home 
--- 

...markdown content... 

我觉得它会朝着正确的方向,但能够想象这里是前事数据已经消失了,如何将它暴露给Nunjucks渲染,目前尚不清楚。任何帮助?

+0

你怎么去@唐小时。你有没有让你的烟斗工作? – rickysullivan

+0

嗨@rickysullivan最后我感到沮丧的过程,并与Metalsmith一起。做我需要的很好。 –

回答

5

您需要gulp-wrap和原始nunjucks

gulp-nunjucks是一个编辑nunjucks模板流的工具,但你需要做的是将你的内容包装在nunjucks模板中,这就是gulp-wrap的用处。

尝试npm install gulp-wrap nunjucks除了其他设置,然后下面应该工作。

gulpfile

var gulp = require('gulp') 
var wrap = require('gulp-wrap') 
var frontMatter = require('gulp-front-matter') 
var marked = require('gulp-marked') 

var fs = require('fs') 

gulp.task('pages:md', function() { 
    gulp.src('./content/**/*.md') 
    .pipe(frontMatter()) 
    .pipe(marked()) 
    .pipe(wrap(function (data) { 
     return fs.readFileSync('path/to/layout/' + data.file.frontMatter.layout).toString() 
    }, null, {engine: 'nunjucks'})) 
    .pipe(gulp.dest('build/')) 
}); 

降价

--- 
title: Title 
layout: layout.nunjucks 
nav_active: home 
--- 

...markdown content... 

layout.nunjucks

<h1>{{ file.frontMatter.title }}</h1> 

<p>{{ contents }}</p> 
2

您可能想看看插件gulp-ssg。我不知道它有什么价值,但是在this issue中提到了与你有同样问题的人。

不完全是你在找什么,但对于这种工作,我已经成功使用metalsmith。例如,如果像我一样,您的JavaScript资源处理比较复杂,您甚至可以将它与gulp混合使用。