Gulp Pipeline с глобальной переменной - PullRequest
0 голосов
/ 05 октября 2018

В задании 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");

});
...