В задании gulp мне нужно заменить те же ссылки в файле.В моей задаче мне нужно:
- прочитать все файлы в одном каталоге (то есть все * .css файлы)
- проверить, содержат ли имена файлов одинаковые слова (то есть min)
- создание массива со старыми парами новых строк
- замена всей старой строки новой строкой
Для этой цели я использую пакет gulp-batch-replace с другими.
Моя идея состоит в том, чтобы создать массив в первом канале (массив является глобальной переменной массива), а затем передать его в следующий канал, где заменить пары.Массив Gloabal создается с помощью вызова tap в pipe, но замена не работает.Я думаю, что этот массив пуст, когда я вызываю канал 2. Внешний вызов в тапе является асинхронным?Спасибо
Это мой код.
var tap = require('gulp-tap');
var replaceAll = require('gulp-batch-replace');
var path = require('path');
gulp.task('pages', function () {
var replaceThis = [];
function replaceFileContent(file) {
var newFileName = path.basename(file.path).trim();
var oldFileName = newFileName.includes('.min') ?
newFileName.replace('.min', '').trim() :
newFileName.substr(0, newFileName.indexOf('.')) + '.min' + newFileName.substr(newFileName.indexOf('.')).trim();
replaceThis.push([oldFileName, newFileName]);
console.log(oldFileName + " ---> " + newFileName);
}
gulp.src('site/dist/css/**/*.css')
.pipe(tap(replaceFileContent))
.pipe(replaceAll(replaceThis))
.pipe(gulp.dest('./site/dist/'));
console.log("end");
});