Gulp: 从磁盘读取内容插入模板
Gulp: Read content from disk to insert into a template
我想读入一个模板,然后读入零个或多个包含要注入模板的内容的文件。模板和内容都在 Markdown 中。根据少量研究,Swig 似乎会提供一个我可以使用的轻量级标记
生成的函数将如下所示:
function assembleCharacterDocument(slug) {
return gulp.src('./templates/character-document.md')
.pipe(files2obj(['characters/'+slug+'/*.md'])) // read content for the character
.pipe(swig()) // == require('gulp-swig'); inject content into template
.pipe(md2pdf()) // convert Markdown to PDF - outside scope of this question
.pipe(gulp.dest('./products/characters/'+slug+'.pdf'));
});
由于 Swig 需要一个普通的旧对象作为其替换数据,我希望每个进入的文件都将其文件名作为其在对象中的键。因此,例如,我的替换数据对象将如下所示:
{
"bio": content of characters/{slug}/bio.md,
"profile": content of characters/{slug}/profile.md,
"timeline": content of characters/{slug}/timeline.md,
etc.
}
files2obj()
的内容是什么?
尝试gulp-swig。它是 Gulp 的 Swig 插件,可与文件流一起使用,因此您无需构建对象或进行任何自定义操作。
他们的Github page also shows a good example with gulp-data,可能对你有帮助。
我最终放弃了 Gulp 管道,直接使用 fs
文件系统方法来完成我的任务。 (为简洁起见省略了依赖项。)
var templatePath = './templates/character-document.md';
var sourcePath = path.join("characters",charSlug);
var targetCombinedMarkdownPath = path.join('products',charSlug+'.md');
fs.readdir(sourcePath,function (err, files) {
if (err) { throw err; }
var data = {};
files.forEach(function(f) {
var check = /^(.*).md$/.exec(f);
if (check) {
data[check[1]] = fs.readFileSync(path.join(sourcePath,f),'utf8');
}
});
var engine = swig.compileFile(templatePath);
var combined = engine(data);
fs.writeFileSync(targetCombinedMarkdownPath, combined);
md2pdf({
title: data.name || "CHARACTER NAME MISSING",
source: [targetCombinedMarkdownPath],
targetFilename: charSlug
});
});
我想读入一个模板,然后读入零个或多个包含要注入模板的内容的文件。模板和内容都在 Markdown 中。根据少量研究,Swig 似乎会提供一个我可以使用的轻量级标记
生成的函数将如下所示:
function assembleCharacterDocument(slug) {
return gulp.src('./templates/character-document.md')
.pipe(files2obj(['characters/'+slug+'/*.md'])) // read content for the character
.pipe(swig()) // == require('gulp-swig'); inject content into template
.pipe(md2pdf()) // convert Markdown to PDF - outside scope of this question
.pipe(gulp.dest('./products/characters/'+slug+'.pdf'));
});
由于 Swig 需要一个普通的旧对象作为其替换数据,我希望每个进入的文件都将其文件名作为其在对象中的键。因此,例如,我的替换数据对象将如下所示:
{
"bio": content of characters/{slug}/bio.md,
"profile": content of characters/{slug}/profile.md,
"timeline": content of characters/{slug}/timeline.md,
etc.
}
files2obj()
的内容是什么?
尝试gulp-swig。它是 Gulp 的 Swig 插件,可与文件流一起使用,因此您无需构建对象或进行任何自定义操作。
他们的Github page also shows a good example with gulp-data,可能对你有帮助。
我最终放弃了 Gulp 管道,直接使用 fs
文件系统方法来完成我的任务。 (为简洁起见省略了依赖项。)
var templatePath = './templates/character-document.md';
var sourcePath = path.join("characters",charSlug);
var targetCombinedMarkdownPath = path.join('products',charSlug+'.md');
fs.readdir(sourcePath,function (err, files) {
if (err) { throw err; }
var data = {};
files.forEach(function(f) {
var check = /^(.*).md$/.exec(f);
if (check) {
data[check[1]] = fs.readFileSync(path.join(sourcePath,f),'utf8');
}
});
var engine = swig.compileFile(templatePath);
var combined = engine(data);
fs.writeFileSync(targetCombinedMarkdownPath, combined);
md2pdf({
title: data.name || "CHARACTER NAME MISSING",
source: [targetCombinedMarkdownPath],
targetFilename: charSlug
});
});