Как заставить функцию gulp работать последовательно? (Глоток-скачать) - PullRequest
0 голосов
/ 18 февраля 2020

Я пытался настроить функции для загрузки, а затем установить фреймворки в свой рабочий процесс разработки с помощью gulp-download. Каждый раз, когда я запускаю gulp-download последовательно, он всегда запускается последним, поэтому функция пытается переместить файлы, затем они загружаются.

Я попытался использовать слияние и запустить его в одной функции, а затем разделить ее и использовал задачу в серии, чтобы запустить его. Ни один из способов не является успешным.

// DOWNLOAD BOOTSTRAP
function downloadBootstrap(cb) {
  download('https://github.com/twbs/bootstrap/releases/download/v4.0.0/bootstrap-4.0.0-dist.zip')
    .pipe(unzip())
    .pipe(gulp.dest('downloads/bootstrap'));
  cb();
}

// INSTALL BOOTSTRAT
function installBootstrap(cb) {

  var css = gulp.src('downloads/bootstrap/css/*.{min.css,min.css.map}')
    .pipe(dest('_developer/2-css/0-frameworks/bootstrap'))

  var js = gulp.src('downloads/bootstrap/js/*.{min.js,min.js.map}')
  .pipe(dest('_developer/3-js/0-frameworks/bootstrap'))

  var clear = gulp.src('downloads/bootstrap', {read: false, allowEmpty: true})
  .pipe(clean())

  return merge(css, js, clear); // Combined src
  cb();
}

gulp.task('bootstrap', gulp.series('downloadBootstrap', 'installBootstrap'));

Ответы [ 2 ]

0 голосов
/ 18 февраля 2020

Я разобрался, мне просто нужно было добавить возврат к загрузке. Теперь у меня есть окончание загрузки до того, как оно перейдет к установке, но теперь переносится только css, остается js и чистка не запускается. У меня были эти работы раньше.

gulp.task("bootstrap", gulp.series(downloadBootstrap, installBootstrap));

function downloadBootstrap() {

  return download('https://github.com/twbs/bootstrap/releases/download/v4.0.0/bootstrap-4.0.0-dist.zip')
    .pipe(unzip())
    .pipe(gulp.dest('downloads/bootstrap'));

}

function installBootstrap() {

  return gulp.src('downloads/bootstrap/css/*.{min.css,min.css.map}') // Gather [developer] css files
    .pipe(gulp.dest('_developer/2-css/0-frameworks/bootstrap')) // Deliver css files to [build]

  return gulp.src('downloads/bootstrap/js/*.{min.js,min.js.map}') // Gather [developer] css files
    .pipe(gulp.dest('_developer/3-js/0-frameworks/bootstrap')) // Deliver css files to [build]

  return gulp.src('downloads/bootstrap', { allowEmpty: true })
    .pipe(clean());

}
0 голосов
/ 18 февраля 2020

Вы должны быть уверены, что вызываете функцию обратного вызова только после завершения вашей задачи. Внутри download возврат вызова функции не означает, что загрузка завершена. Однако, поскольку вы здесь используете конвейер, вы можете полностью исключить параметр обратного вызова. (На несвязанной заметке я бы не использовал две функции с именем download.)

// DOWNLOAD BOOTSTRAP
function download() {
  return download('https://github.com/twbs/bootstrap/releases/download/v4.0.0/bootstrap-4.0.0-dist.zip')
    .pipe(unzip())
    .pipe(gulp.dest('downloads/bootstrap'));
}

Возврат потока гарантирует, что поток будет полностью обработан до продолжения следующей задачи. Кроме того, вы можете просто удалить обратный вызов из вашей функции установки, поскольку он никогда не будет использоваться. (Ничто не запускается после возврата вашей функции.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...