Gulp RSync - 将进度保存到日志文件

Gulp RSync - Save progress to log file

我一直在使用 gulp-rsync 通过 gulp 任务将静态资产部署到我的服务器。我使用增量选项来确定文件是否需要更新。这很好用:)

我需要将控制台中显示的进度保存在文件或其他文件中.. 因为我需要在 cloudflare 上 清除缓存中的单个文件 :/

看起来像那样(在控制台中):

[20:49:52] Starting 'rsync'...
[20:49:53] gulp-rsync: Starting rsync to my-ssh-hostname:/example/public-html/assets/...
[20:49:55] gulp-rsync: sending incremental file list
[20:49:57] gulp-rsync: favicon.ico
[20:49:57] gulp-rsync:         1150 100%  439.45kB/s    0:00:00 (xfer#1, to-check=12/13)
[20:49:57] gulp-rsync: css/main.css
[20:49:57] gulp-rsync:         2712 100%  101.86kB/s    0:00:00 (xfer#2, to-check=11/13)
[20:49:57] gulp-rsync: css/style.css
[20:49:57] gulp-rsync:         1445 100%   54.27kB/s    0:00:00 (xfer#3, to-check=9/13)
[20:49:57] gulp-rsync: js/app.js
[20:49:57] gulp-rsync:        31878 100%    1.09MB/s    0:00:00 (xfer#7, to-check=3/13)
[20:49:57] gulp-rsync: scripts.js
[20:50:01] gulp-rsync:        76988 100%    2.53MB/s    0:00:00 (xfer#9, to-check=1/13)
[20:50:01] gulp-rsync: sent 2401 bytes  received 2820 bytes  10442.00 bytes/sec
[20:50:02] gulp-rsync: total size is 10106  speedup is 4.37
[20:50:02] gulp-rsync: Finished 'rsync' after 3.38 s

我需要保存并提取日志中的文件:

favicon.ico,
css/main.css,
css/style.css, 
js/app.js, 
scripts.js

-- 我的原创 "gulpfile.js" :

var
  gulp = require('gulp'),
  gutil = require('gulp-util'),
  rsync = require('gulp-rsync'),
  logCapture = require('gulp-log-capture');

var config = {
  hostname : 'my-ssh-hostname',
  destination : '/example/public-html/assets/',
  progress: true,
  incremental: true,
  relative: true,
  emptyDirectories: true,
  recursive: true,
  clean: true,
  exclude: ['._', '.DS_Store' , 'thumbs.db', 'desktop.ini'],
  chmod: '775',
};

gulp.task('rsync', function (){
  return gulp.src('./my-local-dir/' + '**/*')
    .pipe(rsync(config))
});

-- 我找到了“Gulp 的日志捕获插件”- gulp-log-capture

正确的使用方法是什么? :/

gulp.task('rsync', function (){
  return gulp.src('./my-local-dir/' + '**/*')
    .pipe(logCapture.start(process.stdout, 'write'))
    .pipe(rsync(config))
    .pipe(logCapture.stop('txt'))
    .pipe(gulp.dest('./dest'));
});

如有任何建议,我们将不胜感激:)

由于 gulp-rsync 的工作方式,您不能为此使用 gulp-log-capture

gulp-rsync 在调用 rsync 之前等待收集所有文件名。否则它将不得不为每个单独的文件调用 rsync,这会严重降低性能。

所以在调用 rsynclogCapture 已经停止捕获日志输出。

您需要侦听 'end' 事件并通过将 process.stdout.write() 替换为您自己的函数(gulp-log-capture 所做的)来自行捕获日志输出:

gulp.task('rsync', function (){
  var logOutput = "";
  var stdoutWrite;
  return gulp.src('./my-local-dir/' + '**/*')
    .on('end', function() {
      stdoutWrite = process.stdout.write;
      process.stdout.write = function(output) { logOutput += output; };
    })
    .pipe(rsync(config))
    .on('end', function() {
      process.stdout.write = stdoutWrite;
      process.stdout.write(logOutput);
      fs.writeFileSync('./dest/logOutput.txt', new Buffer(logOutput));
    });
});

这将 rsync 生成的进度日志存储在 logOutput 变量中并将其写入文件 ./dest/logOutput.txt.

logOutput 中提取文件名现在只是提出适当的正则表达式的问题。我会把那部分留给你。如果这给您带来麻烦,最好问问 .

的人