与请求一起使用gulp

我有以下Gulpfile.js

 'use strict'; const gulp = require('gulp'), request = require('request'); const paths = { vendor: [ 'https://raw.githubusercontent.com/jquery/jquery-dist/master/dist/jquery.min.js', 'https://raw.githubusercontent.com/kenwheeler/slick/master/slick/slick.js' ] }; gulp.task('vendor', (res) => { const url = request.get(paths.vendor).pipe(res); return gulp.src(url) .pipe(gulp.dest('public/vendor')); }); gulp.task('default', gulp.parallel('vendor')); 

我收到以下错误:

 Error: options.uri is a required argument 

用这种方法,我试图解决像Bower这样的客户端包pipe理器。 有没有办法使用gulp request和循环的对象列表?

编辑:

我放置了这个代码进行testing,只返回循环的第一行:

 gulp.task('vendor', () => { for (let i=0; i<paths.vendor.length; i++) { return console.log(paths.vendor[i]); }; }); 

就像:

 gulp.task('vendor', (res) => { const url = request.get(paths.vendor[index++]).pipe(res); return gulp.src(url) .pipe(gulp.dest('public/vendor')); }); 

你不能传递一个URL给gulp.src()gulp实例inheritance了vinyl-fs src()dest() ,这意味着你只能用它来读写本地文件系统。

尝试一下gulp-download ,将request转换为乙烯stream:

 var download = require('gulp-download'); gulp.task('vendor', () => { return download(paths.vendor) .pipe(gulp.dest('public/vendor')); }); 

request.get只能在一个URI上工作,而且你正在传递一个数组,AFAIK parallel期望一个任务列表,而不是一个任务处理多个项目。 也许这会对你有用:

 'use strict'; const gulp = require('gulp'), request = require('request'); const paths = { vendor: [ 'https://raw.githubusercontent.com/jquery/jquery-dist/master/dist/jquery.min.js', 'https://raw.githubusercontent.com/kenwheeler/slick/master/slick/slick.js' ] }; let index = 0; gulp.task('vendor', (res) => { const url = request.get(paths.vendor[index++]).pipe(res); return gulp.src(url) .pipe(gulp.dest('public/vendor')); }); let parallelTasks = (new Array(paths.vendor.length)).fill('vendor'); gulp.task('default', gulp.parallel(...parallelTasks));