用吞咽数据吞噬G G

我正在尝试在我的工作stream中使用gulp-jade的gulp-data,但是我得到了一个与gulp-data插件相关的错误。

这是我的gulpfile.js

var gulp = require('gulp'), plumber = require('gulp-plumber'), browserSync = require('browser-sync'), jade = require('gulp-jade'), data = require('gulp-data'), path = require('path'), sass = require('gulp-ruby-sass'), prefix = require('gulp-autoprefixer'), concat = require('gulp-concat'), uglify = require('gulp-uglify'), process = require('child_process'); gulp.task('default', ['browser-sync', 'watch']); // Watch task gulp.task('watch', function() { gulp.watch('*.jade', ['jade']); gulp.watch('public/css/**/*.scss', ['sass']); gulp.watch('public/js/*.js', ['js']); }); var getJsonData = function(file, cb) { var jsonPath = './data/' + path.basename(file.path) + '.json'; cb(require(jsonPath)) }; // Jade task gulp.task('jade', function() { return gulp.src('*.jade') .pipe(plumber()) .pipe(data(getJsonData)) .pipe(jade({ pretty: true })) .pipe(gulp.dest('Build/')) .pipe(browserSync.reload({stream:true})); }); ... // Browser-sync task gulp.task('browser-sync', ['jade', 'sass', 'js'], function() { return browserSync.init(null, { server: { baseDir: 'Build' } }); }); 

这是一个基本的json文件,名为index.jade.json

 { "title": "This is my website" } 

我得到的错误是:

 Error in plugin 'gulp-data' [object Object] 

你得到的错误,因为在getJsonData你传递所需的数据作为callback的第一个参数。 这是保留可能的错误。

在你的情况下,callback是不需要的。 看一下gulp数据使用的例子,这应该工作:

 .pipe(data(function(file) { return require('./data/' + path.basename(file.path) + '.json'); })) 

完整的例子:

 var gulp = require('gulp'); var jade = require('gulp-jade'); var data = require('gulp-data'); var path = require('path'); var fs = require('fs'); gulp.task('jade', function() { return gulp.src('*.jade') .pipe(data(function(file) { return require('./data/' + path.basename(file.path) + '.json'); })) .pipe(jade({ pretty: true })) .pipe(gulp.dest('build/')); }); 

如果你在gulp.watch上运行任务,请使用这个:

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