与请求一起使用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));