【问题标题】:Gulp. How to merge files without lines duplication吞咽。如何在不重复行的情况下合并文件
【发布时间】:2014-11-10 20:53:45
【问题描述】:

我需要用 gulp 合并 2 个文件。喜欢

concat = require('gulp-concat')

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

但没有行重复。所以如果两个文件包含同一行,合并文件只需要包含该行一次。

文件1

lineA
lineB
lineC

文件2

lineD
lineA
lineF

合并

lineA
lineB
lineC
lineD
lineF

有这个插件吗?请帮忙)

【问题讨论】:

  • 嗨,你能不能在 gulp 中编写一个任务来读取两个文件并生成一个没有重复的文件,它将合并内容写入一个没有重复的新文件。
  • 续上一条评论,异步读取文件并将每一行作为键存储在对象中,其中值为 1。因此,如果该行尚未存储,则仅存储该行。读取所有文件后,您将通过对象的键并写入新文件。此外,您可以在每次发现新行时写入新文件,而不必在末尾。

标签: node.js gulp gulp-concat


【解决方案1】:

你需要使用缓冲映射器,这里是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/'));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-31
    • 2017-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-26
    相关资源
    最近更新 更多