у нас сейчас странная проблема с нашим сервером, когда иногда файл не загружается с первого раза.Поэтому я добавляю запасной вариант в наш gulpfile, чтобы повторить попытку, если он не удастся.
Тем не менее, я хочу отобразить сообщение о том, когда оно все-таки успешно, для которого я обычно использую .on('env', fn)
, но, конечно, это срабатывает, даже если есть ошибка.
Можно ли с помощью gulp определить, успешно ли загружен файл?
const files = [
{ glob: 'templates/*.tpl', base: 'templates/', dest: '/templates/' + theme.folder },
{ glob: 'css-src/*.css', base: 'templates/', dest: '/templates/' + theme.folder },
{ glob: 'js-src/min/**/*-min.js', base: 'templates/', dest: '/templates/' + theme.folder },
{
glob: [
'img-src/theme-compressed/*.png', 'img-src/theme-compressed/*.jpg',
'img-src/theme-compressed/*.gif', 'img-src/theme-compressed/*.jpeg',
'img-src/theme-compressed/*.svg'
],
base: 'img-src/theme-compressed/', dest: '/img-src/' + theme.folder + '/theme'
},
{
glob: [ 'img-src/cars-compressed/*.png', 'img-src/cars-compressed/*.jpg', 'img-src/cars-compressed/*.jpeg' ],
base: 'img-src/theme-compressed/', dest: '/img-src/' + theme.folder + '/theme'
},
];
function uploadFiles(event, index, group) {
gulp.src([ event.path ], { base: group.base, buffer: false })
.pipe(ftp.dest(group.dest)
.on('error', function () {
retry[index]++;
if (retry[index] <= 3) {
console.log('Failed to upload template, retrying... (' + retry[index] + ')');
uploadFiles(event, index, group);
}
})
.on('end', function() {
console.log('file uploaded?');
})
)
}
files.forEach((group, index) => {
retry[index] = 0;
$.gulpWatch(group.glob, { awaitWriteFinish: true }, (event) => {
$.fsExtra.pathExists(event.path, (err, exists) => {
if (exists) {
uploadFiles(event, index, group);
}
});
});
});
Как видите, я разрешаю запускаться только 3 раза, но обычно он работает во второй раз.тем не мение.Проблема в том, что я бью .on('end', fn)
, даже когда это не удается.