如何使用Gulp中的Assemble从数据创建页面?

时间:2016-02-03 22:44:36

标签: gulp assemble

我目前正在使用Gulp作为项目的构建工具。其中一个Gulp任务使用Assemble将Handlebars页面/布局组装成HTML:

var assemble = require('assemble')();

gulp.task('assemble', ['clean'], function () {
    assemble.partials('./partials/**/*.hbs');
    assemble.layouts('./layouts/**/*.hbs');
    assemble.pages('./pages/**/*.hbs');

    loadHelpers(); // Calls assemble.helpers(...) on some Handlebars helpers

    var data = require('./hbs_context.json');
    assemble.data(data);
    assemble.data({root: process.cwd()});

    return assemble.toStream('managements')
        .pipe(assemble.renderFile())
        .pipe(plugins.extname()) // Converts .hbs to .html
        .pipe(gulp.dest('.tmp/'));
});

我遇到了我项目的一部分,需要从数据数组创建多个页面,其中数组的每个对象都是单独页面的上下文。

同样的问题已被提出并多次回答:

How can I generate multiple pages from a JSON file with Assemble

Assemble: How can I generate pages from json/yaml?

grunt assemble multiple files from one datafile

https://github.com/assemble/assemble/issues/236

https://github.com/assemble/assemble/issues/184

https://github.com/assemble/assemble/pull/234

但是,所提供的所有解决方案都使用Grunt选项,我无法弄清楚如何在Gulp中做同样的事情。那么,在Gulp中有没有相同的方法呢?

1 个答案:

答案 0 :(得分:0)

我刚刚开始设置Assemble,它似乎在没有问题的情况下运行。这depreciated NPM plugin显示了它是如何完成的,注意区别:

与Gulp组装

var gulp = require('gulp');
var htmlmin = require('gulp-htmlmin');
var extname = require('gulp-extname');
var assemble = require('assemble');
var app = assemble();
 
gulp.task('load', function(cb) {
  app.partials('templates/partials/*.hbs');
  app.layouts('templates/layouts/*.hbs');
  app.pages('templates/pages/*.hbs');
  cb();
});
 
gulp.task('assemble', ['load'], function() {
  return app.toStream('pages')
    .pipe(app.renderFile())
    .pipe(htmlmin())
    .pipe(extname())
    .pipe(app.dest('site'));
});
 
gulp.task('default', ['assemble']);

没有Gulp组装

var htmlmin = require('gulp-htmlmin');
var extname = require('gulp-extname');
var assemble = require('assemble');
var app = assemble();
 
app.task('load', function(cb) {
  app.partials('templates/partials/*.hbs');
  app.layouts('templates/layouts/*.hbs');
  app.pages('templates/pages/*.hbs');
  cb();
});
 
app.task('assemble', ['load'], function() {
  return app.toStream('pages')
    .pipe(app.renderFile())
    .pipe(htmlmin())
    .pipe(extname())
    .pipe(app.dest('site'));
});
 
app.task('default', ['assemble']);

汇编可以使用所有Gulp插件没有问题。

如果您想了解更多信息,请查看此讲座:https://www.youtube.com/watch?v=R9kOy2e5koE

到目前为止,我发现您可以插入如下数据:

app.task('load', function(cb) {
  app.data('templates/data/*.json');
  app.partials('templates/partials/*.hbs');
  app.layouts('templates/layouts/*.hbs');
  app.pages('templates/pages/*.hbs');
  cb();
});

它必须是“加载”任务中的第一个。