Я пытаюсь написать рабочий процесс с Глотком 4 (см ниже конкретной информацией версии), которая будетКак заставить Gulp4 ждать задач записи файлов, чтобы конкурировать?
- смотреть локальную папку для .html файла
- полосы нескольких таблиц на отдельные файлы .html в таблице
- преобразовать указанные таблицы в .csv для дальнейшей обработки
- очистить временный каталог, все эти файлы тоже сброшены.
Проблема, с которой я столкнулся, неважно, что я пытаюсь. Я не могу заставить мою задачу очистки ждать, пока остальные задачи будут записывать файлы на диск. Я попытался вложить функции сбора данных, включая все методы изменения в один длинный поток, и несколько других неуклюжих решений, предлагаемых здесь и в других местах - никто из них не работает. Любые указатели были бы большой помощью.
var gulp = require('gulp');
var exec = require('child_process').exec;
var rename = require('gulp-rename');
var inject = require('gulp-inject-string');
var htmlSplit = require('gulp-htmlsplit');
var del = require('del');
// Clean all non-csv files from ./data/temp
function clean() {
return del(['data/temp/*', '!data/temp/*.csv']);
}
// Convert HTML tables to CSV files
function convertCSV(filename) {
return exec('node node_modules/html-table-to-csv data/temp/' + filename + '.html data/temp/' + filename + '.csv');
}
// Move a renamed copy of original report to .data/temp/
function getData() {
return gulp.src('data/report/*.html')
.pipe(rename('injected.html'))
.pipe(gulp.dest('data/temp'));
}
// Inject split start comments before each <table> tag
function injectBefore() {
return gulp.src('data/temp/*.html')
.pipe(inject.beforeEach('<table', '<!-- split table.html -->\n'))
.pipe(gulp.dest('data/temp'));
}
// Inject split stop comments after each </table> tag
function injectAfter() {
return gulp.src('data/temp/*.html')
.pipe(inject.afterEach('</table>', '\n<!-- split stop -->'))
.pipe(gulp.dest('data/temp'));
}
// Split each table into its own HTML file for CSV conversion
function htmlCSV(done) {
var i = 0;
return gulp.src('data/temp/injected.html')
.pipe(htmlSplit())
.pipe(rename(function(file) {
// Append unique number to end of each HTML file
file.basename += i >= 9 ? ++i : '0' + ++i;
// Send unique numbered HTML file to convertCSV()
convertCSV(file.basename);
}))
.pipe(gulp.dest('data/temp'));
done();
}
gulp.task('default', gulp.series(getData, injectBefore, injectAfter, htmlCSV, clean));
// FILE STRUCTURE
// analytics
// |_bower_components
// |_data
// |_report <-- Original report in HTML dumped here
// |_temp <-- Injected and converted files dumped here
// |_node_modules
// |_gulpfile.js and other files
//
// Gulp - CLI version 1.2.2
// Gulp - Local version 4.0.0-alpha.2
// Node - v6.9.5
// NPM - 3.10.10
// OS - Windows 7 6.1.7601 Service pack 1 Build 7601
Отвечая это потребует полная переписывание, вы смешиваете синхронизацию и асинхронный код вместе. задачи gulp ожидают возвращенный поток или обратный вызов конца, который должен быть запущен. Позвольте мне посмотреть, что я могу придумать с – SteveLacy