Gulp:合并文件

时间:2017-07-06 07:53:10

标签: javascript node.js gulp

我有以下项目结构:

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
            ├ ...

这是我当前的gulp任务,而不是这样做,合并所有文件:

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 个答案:

答案 0 :(得分:2)

您可以尝试将每个语言环境文件夹处理为自己的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);
});