如何使用 Gulp plugin notify with del?

How to using Gulp plugin notify with del?

这应该很简单...我正在尝试创建删除已完成的通知。

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

通知=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'));
});

以上returns一个错误-"TypeError: del(...).pipe is not a function"

如果您查看 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_modules 中了。根据您的 NPM 版本,它可能不在根目录中。

添加而不安装 NPM - var notifier = require('node-notifier');

gulp.task('clean', function(){
  return del(dist) && notifier.notify({message:'Clean Done!'})
});

正确完成这项工作的关键是 del returns 一个承诺。所以你必须处理承诺。

我创建了一个包含 3 个任务的 gulpfile:

  1. clean 说明了如何操作。

  2. fail说明了能够处理故障的要点。

  3. incorrect 复制了 中的方法 这是不正确的,因为 del returns 一个 promise 对象是否成功。因此 && 测试将始终评估表达式的第二部分,因此将始终通知 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!'});
});