2017-07-06 124 views
1

我有以下項目結構:咕嘟咕嘟:合併文件

my_app 
├── gulpfile.js 
├── package.json 
└── source 
   └── locales 
     ├ en 
     │ ├─ core.json 
     │ └─ ui.json 
     ├ es 
     │ ├─ core.json 
     │ └─ ui.json 
     ├ fr 
     │ ├─ core.json 
     │ └─ ui.json 
     ├ ... 

目標:我想在每個語言目錄中的文件合併成一個,即:

my_app 
    ├── gulpfile.js 
    ├── package.json 
    └── source 
       └── locales 
      ├ en 
      │ └─ strings.json 
      ├ es 
      │ └─ strings.json 
      ├ fr 
      │ └─ strings.json 
      ├ ... 

這裏是我的目前的一攬子任務,而不是這樣做,合併所有文件:

var merge = require('gulp-merge-json'); 
... 
gulp.src([ 
     'source/locales/**/*.json', 
     'source/locales/**/*.json' 
     ]) 
     .pipe(merge({fileName: 'strings.json'})) 
     .pipe(gulp.dest('source/locales/')); 

但這使得目錄結構是這樣的:

my_app 
    ├── gulpfile.js 
    ├── package.json 
    └── source 
       └── locales 
      └ strings.json 

有什麼建議嗎?

回答

1

您可以通過處理每個區域設置文件夾到自己的gulp任務嘗試:

var fs = require('fs'), 
    path = require('path'), 
    gulp = require('gulp'), 
    merge = require('gulp-merge-json'), 
    comb = require('merge-stream'); 

function getLocales(dir) { 
    return fs.readdirSync(dir).filter(function(file) { 
    return fs.statSync(path.join(dir, file)).isDirectory(); 
    }); 
} 

gulp.task('default', function() { 
    var locales = getLocales('source/locales'); 
    var tasks = locales.map(function(locale) { 
    return gulp.src('source/locales/' + locale + '/*.json') 
     .pipe(merge({fileName: 'strings.json'})) 
     .pipe(gulp.dest('source/locales/' + locale)); 
    }); 

    return comb(tasks); 
});