我想使用gulp和Nunjucks同时生成多个不同内容的模板文件。这些模板都将具有完全相同的布局,但是传入不同的文本/图像变量。
我能够成功地生成一个index.html文件,但我不知道如何设置它,以便同时创建多个文件。以下是我所拥有的一个简化版本:
gulpfile.js
var nunjucks = require('gulp-nunjucks-render');
var data = require('gulp-data');
gulp.task('nunjucks', function () {
return gulp
.src('./src/layouts/**/*.+(html|nunjucks)')
.pipe(data(function () { return require('./src/data.json'); }))
.pipe(nunjucks({ path: ['./src/templates'] }))
.pipe(gulp.dest('./dist'));
});layout.nunjucks
<head>
{% block title %} {% endblock %}
</head>index.nunjucks
{% extends "layout.nunjucks" %}
{% block title %}
<title>{{ title }}</title>
{% endblock %}data.json
{
"title": "DEFAULT"
}在每个文件都有不同标题的情况下,更改此工作流以生成多个文件的最佳方法是什么?
我发现我可以创建多个index.nunjucks文件,但是看起来它们都使用相同的data.json文件。我也不想为每个JSON文件创建一个单独的JSON文件。
我是否可以向我的data.json文件中添加一个数组,让Nunjucks循环起来,并为找到的每个对象创建一个单独的文件?例如:
data.json
{
"files": [{
"title": "DEFAULT",
}, {
"title": "DEFAULT #2"
}]
}或者是否有一种方法可以在index.nunjucks文件中设置变量而不依赖于将它们存储在JSON中?
发布于 2017-10-02 20:26:15
找到了这样做的方法:在每个Nunjucks索引文件中,我将一个名为email的变量设置为文件名,并使用与文件名与其自身内容相匹配的新对象更新了我的data.json文件。
default.nunjucks
{% set email = default %}
{% include "index.nunjucks" %}test.nunjucks
{% set email = test %}
{% include "index.nunjucks" %}index.nunjucks
{% extends "layout.nunjucks" %}
{% block title %}
<title>{{ email.title }}</title>
{% endblock %}layout.nunjucks
<head>
{% block title %} {% endblock %}
</head>data.json
{
"default":
{
"title": "TITLE"
},
"test":
{
"title": "TEST TITLE"
}
}当通过吞咽编译时,两封单独的电子邮件会使用相同的模板以自己的标题创建。
https://stackoverflow.com/questions/46508242
复制相似问题