咕嘟咕嘟。如何在没有行重复的情况下合并文件

时间:2014-11-10 20:53:45

标签: node.js gulp gulp-concat

我需要将2个文件与gulp合并。像

concat = require('gulp-concat')

gulp.src(['file1', 'file2'])
.pipe(concat('merge'))
.pipe(gulp.dest('dest/'));

但没有重复的行。因此,如果两个文件包含相同的行,则合并文件只需包含此行一次。

文件1

lineA
lineB
lineC

file2的

lineD
lineA
lineF

合并

lineA
lineB
lineC
lineD
lineF

这有插件吗?请帮助)

1 个答案:

答案 0 :(得分:3)

您需要使用缓冲区映射器,以下是map-stream的示例:

var concat = require('gulp-concat');
var map    = require('map-stream');

var uniqueFilterFn = function(item, idx, all) {
  return idx === all.indexOf(item);
};

gulp.src(['file1', 'file2'])
.pipe(concat('merge'))
.pipe(map(function(file, cb) {

  // convert file buffer into a string
  var contents = file.contents.toString();

  // split it by lines
  var lines = contents.split(/[\r\n]/);

  // apply the unique filter
  var uniqueLines = lines.filter(uniqueFilterFn);

  // join unique list into lines
  var output = uniqueLines.join('\n');

  // convert string back into buffer
  var buffer = new Buffer(output, 'binary');

  // replace the file contents
  file.contents = buffer;

  // continue
  return cb(null, file);
}))
.pipe(gulp.dest('dest/'));