可以使用gulp创建一个zip文件并上传而不使用临时文件?

dim*_*sia 5 stream node.js gulp

我想创建一个zip文件并上传它而无需像这样写入临时文件到磁盘:

gulp.task( 'zip-upload', function() {
  return gulp.src( '**/*', { cwd: 'out/', cwdbase: true } )
    .pipe( zip( 'file.zip' ) )
    .pipe( request.put( 'https://myurl.com' ) );
});
Run Code Online (Sandbox Code Playgroud)

但它抛出一个错误:

http.js:853
    throw new TypeError('first argument must be a string or Buffer');

TypeError: first argument must be a string or Buffer
    at ClientRequest.OutgoingMessage.write (http.js:853:11)
    at Request.write (.../node_modules/request/request.js:1315:25)
Run Code Online (Sandbox Code Playgroud)

我最后通过使用两个任务来解决它,但这并不理想:

gulp.task( 'zip', function() {
  return gulp.src( '**/*', { cwd: 'out/', cwdbase: true } )
    .pipe( zip( 'file.zip' ) )
    .pipe( gulp.dest( './' ) );
});

gulp.task( 'upload', [ 'zip' ], function() {
  fs.createReadStream('file.zip').pipe( request.put( 'https://myurl.com' ) );
});
Run Code Online (Sandbox Code Playgroud)

是否可以使用类似第一种方法的东西?

依赖关系:

npm install gulp-zip request
Run Code Online (Sandbox Code Playgroud)

谢谢.

Sim*_*olt 2

看起来gulp-buffer应该能够解决您的问题:

安装 gulp-buffer 并将其添加到您的 gulpfile 中,然后在 zip 调用和请求之间插入缓冲区。

gulp.task( 'zip-upload', function() {
  return gulp.src( '**/*', { cwd: 'out/', cwdbase: true } )
    .pipe( zip( 'file.zip' ) )
    .pipe( buffer() )
    .pipe( request.put( 'https://myurl.com' ) );
});
Run Code Online (Sandbox Code Playgroud)