gulp 生成 TypeError:Streams 属性必须是函数类型

Had*_*out 1 javascript pipeline node.js gulp gulp-uglify

我在尝试使用gulpTypeError: The "streams[stream.length - 1]" property must be of type function. Received an instance of Pumpify包缩小 javascript 时遇到错误,

Using gulpfile MY_PROJECT_PATH\gulpfile.js
Starting 'compress'...
'compress' errored after 21 ms
TypeError: The "streams[stream.length - 1]" property must be of type function. Received an instance of Pumpify
at popCallback (MY_PROJECT_PATH\node_modules\readable-stream\lib\internal\streams\pipeline.js:59:3)
at pipeline (MY_PROJECT_PATH\node_modules\readable-stream\lib\internal\streams\pipeline.js:134:37
Run Code Online (Sandbox Code Playgroud)

这是我在 [gulpfile.js] 中的代码

var gulp = require('gulp');
var uglify = require('gulp-uglify');
var pipeline = require('readable-stream').pipeline;

gulp.task('compress', function () {
   return pipeline(
       gulp.src('DIR_NAME/*.js'),
       uglify(),
       gulp.dest('DIR_NAME/dist')
   );
});
Run Code Online (Sandbox Code Playgroud)

package.json 文件:我在调试时尝试安装 [pipeline, Readable-stream, Pumpify]

{
  "devDependencies": {
     "gulp": "^4.0.2",
     "gulp-uglify": "^3.0.2",
     "pipeline": "^0.1.3",
     "pumpify": "^2.0.1",
     "readable-stream": "^4.3.0"
    }
}
Run Code Online (Sandbox Code Playgroud)

GOT*_*O 0 5

解决方案1

pipeline函数来自streamreadable_stream期望回调作为最后一个参数。

var gulp = require('gulp');
var uglify = require('gulp-uglify');
var pipeline = require('readable-stream').pipeline;

gulp.task('compress', function (cb) {
    return pipeline(
        gulp.src('DIR_NAME/*.js'),
        uglify(),
        gulp.dest('DIR_NAME/dist'),
        cb
    );
});
Run Code Online (Sandbox Code Playgroud)

解决方案2

stream/promises公开一个基于承诺的版本,其pipeline不使用回调:

var gulp = require('gulp');
var uglify = require('gulp-uglify');
var pipeline = require('stream/promises').pipeline;

gulp.task('compress', async function () {
    await pipeline(
        gulp.src('DIR_NAME/*.js'),
        uglify(),
        gulp.dest('DIR_NAME/dist')
    );
});
Run Code Online (Sandbox Code Playgroud)

解决方案3

然后是传统的管道蒸汽方式,即方法.pipe()

var gulp = require('gulp');
var uglify = require('gulp-uglify');

gulp.task('compress', function () {
    return gulp.src('DIR_NAME/*.js')
        .pipe(uglify())
        .pipe(gulp.dest('DIR_NAME/dist'));
});
Run Code Online (Sandbox Code Playgroud)