2014-12-05 129 views
1

我想在我的工作流程中使用吞噬大量数据,但是我得到了一个与吞数据插件相关的错误。使用吞噬数据吞噬大量的G 012

这里是我的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] 

回答

4

由于在getJsonData中将所需数据作为回调的第一个参数传递,因此您会收到错误消息。这是为可能的错误保留的。

在你的情况下,不需要回调。看着gulp-data usage example这应该工作:

.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')); 
})) 
+0

我没有收到错误了但如果我在'index.jade'中输入'p = title',那么在生成的html文件中只会得到一个空的'p'标签。我检查了gulp-jade文档,并且我使用'geJsonData'变量的原因是因为它推荐了[这里](https://www.npmjs.org/package/gulp-jade#use-with-gulp-data -https-www -npmjs-org-package-gulp-data-) – Cos 2014-12-05 11:09:23

+0

很奇怪。这个对我有用。饮用玉的例子已经过时了。 – Heikki 2014-12-05 11:19:33

+0

刚刚发现它实际上工作,但只有当我在终端中运行'gulp'命令。有没有办法在任务运行中获取对象内容并实时插入数据? – Cos 2014-12-05 11:31:03