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
,这会严重降低性能。
所以在调用 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.
的人
我一直在使用 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
,这会严重降低性能。
所以在调用 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.