首页 > 解决方案 > Gulp 泵错误:错误:泵至少需要两个流

问题描述

我在 Gulp 中创建了一个简单的删除任务。它删除 dist 文件夹

// DELETE TASK
var DIST_PATH = 'public/dist';
gulp.task('clean', function(cb) {
  pump([del.sync([DIST_PATH])], cb);
});

但我收到此错误消息:错误:泵至少需要两个流

发生了什么以及如何解决这个问题的任何想法?谢谢利诺

标签: gulp

解决方案


简短回答:您只在数组中提供 1 个流作为泵的第一个参数,而 2 是最小值。考虑做

// DELETE TASK
var DIST_PATH = 'public/dist';
gulp.task('clean', function(cb) {
  del.sync([DIST_PATH])
  .on('error', function(error) { console.error('ERROR: '+ error.toString() } )
});

长答案: 我试图丑化我连接的 es6 脚本,但未能让我留下这些无用的堆栈跟踪。这是我第一次使用 Gulp,遇到了很多障碍(例如 uglify 开箱即用不支持 javascript6)。每个人都说:'使用泵'。所以我开始使用泵,然后得到了和你一样的错误。这似乎是一个完全难以理解的错误消息,但却为您提供了所需的线索。

您需要在泵的第一个参数(数组)中提供至少 2 个流。对于一个 gulp 新手:流意味着你希望 gulp 执行的(子)任务字符串。所以下面的代码给了我和你一样的错误,因为我只为泵提供一个流。

var gulp = require('gulp');
var concat = require("gulp-concat");
var gutil = require('gulp-util');
var uglifyes = require('uglify-es'); //for es6 to work
var composer = require('gulp-uglify/composer');//for es6 to work
var uglify = composer(uglifyes, console);//for es6 to work
var rename = require('gulp-rename');
var pump = require('pump');

gulp.task('default', function(callback) {
  pump([
      gulp.src(['js/file0.js','js/file1.js')
      .pipe(concat('all.js'))
      .pipe(gulp.dest('build'))
      .pipe(uglify())
      .pipe(rename({ extname: '.min.js' }))
      .pipe(gulp.dest('build'))
    ],
    callback);
});

但随后仔细查看示例,发现您必须在其单独的子任务中分割流。我将 gulp 任务重写为

gulp.task('default', function(callback) {
  pump([
      gulp.src(['js/file0.js','js/file1.js']),
      concat('all.js'),
      gulp.dest('build'),
      uglify(),
      rename({ extname: '.min.js' }),
      gulp.dest('build')
    ],
    callback);
});

请注意,所有 .pipe() 调用已被删除,所有子任务(即流)已被逗号分隔,因此在 pump 的数组参数中添加的不是 1,而是至少 2 个流。

我的两分钱


推荐阅读