Gulp使用gulp-data和gulp-jade与目录

时间:2016-01-21 10:15:48

标签: javascript json node.js gulp

我有一个gulp工作流程,一切运行正常,但它似乎只适用于最上面的文件,例如:public/index.html,但如果我想使用public/products/item.html gulp-data 会抛出错误并查找src/json/item.json而不是src/json/products/item.json

我认为自从我使用path.basename(file.path, '.jade') + '.json')后出现了问题,它只会返回文件名,当然,如果是这样,如果它抛出类似products/item.jade的内容,如何使它也提供目录?

var basePath = {
    src: 'src/',
    dest: 'public/'
}

var src = {
    pages: basePath.src + 'jade/',
    json : basePath.src + 'json'
}

gulp.task('make:pages', function() {
    return gulp.src(src.pages + '**/!(_)*.jade')
        .pipe(plumber({
            errorHandler: onError
        }))
        .pipe(data(function(file) {
            return JSON.parse(fs.readFileSync('src/json/' + path.basename(file.path, '.jade') + '.json'));
        }))
        .pipe(jade({
            pretty: true
        }))
        .pipe(gulp.dest(basePath.dest));
});

1 个答案:

答案 0 :(得分:0)

假设我使用相同的文件夹结构:

src
├── fonts
├── jade
│   ├── _layout.jade
│   ├── index.jade
│   ├── product
│   │   └── item.jade
│   ├── partials
│   │   ├── _footer.jade
│   │   └── _header.jade
├── js
├── json
│   ├── index.json
│   ├── product
│   │   └── item.json

我改为使用了这个:

return JSON.parse(fs.readFileSync(file.path.replace(/jade/g, 'json')));

它有效! :)