2014-12-05 64 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