gulp-nunjucks-html + gulp-data没有在手表上编译

时间:2016-02-17 12:28:13

标签: json gulp gulp-watch nunjucks

我写了一个gulp任务来从json文件中获取数据并将其作为html处理。当我第一次运行构建时,这就像一个魅力,但是我已经设置了一个监视任务来执行此操作,虽然它会将nunjucks文件重建为html,但它似乎忽略了json直到下一个完整版本(即使所有的手表都运行相同的任务)

这是我的任务:

// Process nunjucks html files (.nunjucks)
gulp.task('nunjucks', function() {
  'use strict';
  return gulp.src('src/html/pages/**/*.nunjucks')
    .pipe(plumber(
      { errorHandler: onError }
    ))
    .pipe(data(function(file) {
      return require('./src/model/' + path.basename(file.path) + '.json');
    }))
    .pipe(data(function() {
      return require('./src/model/globals.json');
    }))
    .pipe(nunjucks({
      searchPaths: ['src/html/templates']
    }))
    .pipe(extReplace('.html'))
    .pipe(gulp.dest('dist'))
    .pipe(reload({stream:true}))
});

这是我的整个gulp文件,以防问题出现在其他地方并且我没有发现它:http://pastebin.com/q9vc8h6i

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

花了一段时间,但我找到了解决方法。我只是将注释掉的行替换为它下面的一行:

 .pipe(data(function(file) {
    //return require('./src/model/' + path.basename(file.path) + '.json');
    return JSON.parse(fs.readFileSync('./src/model/' + path.basename(file.path, '.nunjucks') + '.json'));
 }))

编辑:我还必须将var fs = require('fs')添加到gulp文件的顶部,它是一个节点包,因此不需要其他依赖项。