2016-07-15 80 views
1

我有以下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 

用這種方法我想dicthing客戶端軟件包管理器,像鮑爾。有沒有辦法使用requestgulp並循環對象列表?

編輯:

我把這段代碼進行測試,只返回從循環的第一行:

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')); 
}); 
+0

'request.GET中({URI:paths.vendor})' –

+0

我有此錯誤消息:'錯誤:無效URI '''' – Lanti

回答

1

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)); 
+0

'parallel'就像整體一樣被剝離下來,所以它有更多的任務。對不起,沒有進行說明。 – Lanti

+1

我有'TypeError:dest.on不是函數'錯誤在'.pipe(res);'。 – Lanti

+0

更新了我的問題。 – Lanti

3

你不能傳遞一個URL到gulp.src()gulp實例從vinyl-fs繼承src()dest(),這意味着您只能使用它來讀取和寫入本地文件系統。

嘗試gulp-download代替,它包裝request成乙烯基流:

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

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