Как с помощью плагина Gulp уведомить Del?

Это должно быть легко... Я пытаюсь создать уведомление о том, что Del сделал.

Del = https://www.npmjs.com/package/del

Notify = https://www.npmjs.com/package/gulp-notify

Я имею:

gulp.task('clean', function() {
    return del(['distFolder']);
});

Это очищает все в distFolder, прежде чем он будет восстановлен.

Я пытаюсь сделать что-то вроде ниже:

gulp.task('clean', function() {
    return del(['distFolder']).pipe(notify('Clean task finished'));
});

Вышеприведенное возвращает ошибку - "TypeError: del(...). Pipe не является функцией"

3 ответа

Решение

Ключом к тому, чтобы сделать это правильно, является то, что del возвращает обещание Так что вы должны справиться с обещанием.

Я создал gulpfile, который имеет 3 задачи:

  1. clean иллюстрирует, как это сделать.

  2. fail иллюстрирует возможность обработки ошибок.

  3. incorrect повторяет метод в самостоятельном ответе ОП. Это неверно, потому что del возвращает объект обещания независимо от того, успешен он или нет. Итак && test всегда оценивает 2-ю часть выражения и таким образом всегда уведомляет Clean Done! даже если произошла ошибка и ничего не было удалено.

Вот код:

var gulp = require("gulp");
var notifier = require("node-notifier");
var del = require("del");

// This is how you should do it.
gulp.task('clean', function(){
  return del("build").then(function () {
      notifier.notify({message:'Clean Done!'});
  }).catch(function () {
      notifier.notify({message:'Clean Failed!'});
  });
});

//
// Illustrates a failure to delete. You should first do:
//
// 1. mkdir protected
// 2. touch protected/foo.js
// 3. chmod a-rwx protected
//
gulp.task('fail', function(){
  return del("protected/**").then (function () {
      notifier.notify({message:'Clean Done!'});
  }).catch(function () {
      notifier.notify({message:'Clean Failed!'});
  });
});

// Contrary to what the OP has in the self-answer, this is not the
// correct way to do it. See the previous task for how you must setup
// your FS to get an error. This will fail to delete anything but
// you'll still get the "Clean Done" message.
gulp.task('incorrect', function(){
  return del("protected/**") && notifier.notify({message:'Clean Done!'});
});

Если вы посмотрите на модуль Del, он не возвращает поток, поэтому не будет никакой функции канала (как объясняет ошибка).

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

например

var clean = require('gulp-clean');
var notify = require('gulp-notify');

gulp.task('clean', function() {
    return gulp.src('distFolder', {read: false})
         .pipe(clean())
         .pipe(notify('Clean task finished'));
});

Решил это -

Уведомление Node - это зависимость уведомления. Так должно быть уже в node_modules. В зависимости от вашей версии NPM он может не быть в корне.

Добавить без установки NPM - var notifier = require('node-notifier');

gulp.task('clean', function(){
  return del(dist) && notifier.notify({message:'Clean Done!'})
});
Другие вопросы по тегам