我一直在使用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'));
});
任何sugestions将是apreciated:)
答案 0 :(得分:0)
由于gulp-log-capture
的工作方式,您无法使用gulp-rsync
。
gulp-rsync
等待它在调用rsync
之前收集了所有文件名。否则,它必须为每个单独的文件调用rsync
,这会严重降低性能。
因此,在调用rsync
时logCapture
已停止捕获日志输出。
您需要监听'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
中提取文件名现在只是提出适当的正则表达式。我会把那部分留给你。如果这给您带来麻烦,最好在regex向人们询问。