Как с помощью плагина 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 задачи:
clean
иллюстрирует, как это сделать.fail
иллюстрирует возможность обработки ошибок.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!'})
});