Проблема при запуске gulp.series()

#gulp #gulp-task

#глоток #gulp-задача

Вопрос:

У меня есть задача минимизировать файлы JS, когда они находятся в производстве

 function scriptsToMinify() {
 if(require('yargs').argv.production)
 {
  return gulp.src(src.JSFile)
  .pipe(sourcemaps.init())
  .pipe(ngAnnotate(
    {
      remove: true,
      add: true,
      single_quotes: true
    }))
  .pipe(concat('app.min.js'))
  .pipe(uglify())
  .on('error', function (err) { gutil.log(gutil.colors.red('[Error]'), err.toString()); })
  .pipe(sourcemaps.write())
  .pipe(gulp.dest('public'));
 }
}
  

Когда я запускаю локально, он не запускает зависимые задачи

 gulp.task('inject-scripts', gulp.series(scriptsToMinify, function() {

  var thridPartyScripts = gulp.src(src.thirdPartyJS, { read: false })      
  var scripts = gulp.src([src.app_js, src.directiveJS], { read: false })

  return gulp.src('views/index.html')
.pipe(inject(series(thridPartyScripts, scripts))) // Inject files in an order to run the application without any dependency error.
.pipe(cachebust({ // Add the timestamp to the injected files to avoid cache issue
  type: 'timestamp'
}))
.pipe(gulp.dest('views'));
});
  

Вышеупомянутая задача вызывает у меня ошибку ниже.

  The following tasks did not complete: default, inject-scripts, scriptsToMinify
 Did you forget to signal async completion?
  

Комментарии:

1. Итак, у вас есть проблемы, когда вы не работаете для производства?

2. Да, когда он не работает, он выдает ошибку. Этот же файл мы используем для продукта и локальной разработки. В GUlp 3 он принимает пустую зависимую задачу, но в новом gulp 4 это не разрешено.

Ответ №1:

Измените задачу scriptsToMinify на

 function scriptsToMinify(done) {
 if(require('yargs').argv.production)
 {
  return gulp.src(src.JSFile)
  .pipe(sourcemaps.init())
  .pipe(ngAnnotate(
    {
      remove: true,
      add: true,
      single_quotes: true
    }))
  .pipe(concat('app.min.js'))
  .pipe(uglify())
  .on('error', function (err) { gutil.log(gutil.colors.red('[Error]'), err.toString()); })
  .pipe(sourcemaps.write())
  .pipe(gulp.dest('public'));
 }
else{
  done();
}
}
  

Вы должны вернуть сигнал, когда задача завершена, поэтому вам нужно передать обратный вызов.

Комментарии:

1. Большое спасибо, чувак. Я не знал, что мы можем вернуться таким образом. Ваш код работает!!!