使用Gulp压缩JS时遇TypeError:streams需为函数,收到Pumpify实例
Gulp压缩JS报错:TypeError: The "streams[stream.length - 1]" property must be of type function
问题详情
执行Gulp压缩JS任务时触发错误:TypeError: The "streams[stream.length - 1]" property must be of type function. Received an instance of Pumpify
完整错误日志:
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
当前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') ); });
package.json依赖配置:
{ "devDependencies": { "gulp": "^4.0.2", "gulp-uglify": "^3.0.2", "pipeline": "^0.1.3", "pumpify": "^2.0.1", "readable-stream": "^4.3.0" } }
解决方法
原因分析
readable-stream 4.x版本的pipeline API要求最后一个参数必须是回调函数,但Gulp的gulp.dest()返回的是流对象,不符合该API的参数要求,因此触发错误。
方案一:改用pump包实现流管道
- 安装pump依赖:
npm install pump --save-dev
- 修改
gulpfile.js代码:
var gulp = require('gulp'); var uglify = require('gulp-uglify'); var pump = require('pump'); gulp.task('compress', function (cb) { pump([ gulp.src('DIR_NAME/*.js'), uglify(), gulp.dest('DIR_NAME/dist') ], cb); });
方案二:降级readable-stream到3.x版本
- 卸载当前的readable-stream:
npm uninstall readable-stream
- 安装3.x兼容版本:
npm install readable-stream@3 --save-dev
降级后原gulpfile.js代码无需修改即可正常运行。
额外清理
你安装的pipeline包是无关依赖,可执行以下命令卸载:
npm uninstall pipeline
内容的提问来源于stack exchange,提问作者Hady Shaltout
相关产品推荐
相关产品推荐

