如何用gulp提取zip文件

时间:2014-01-30 11:22:17

标签: gulp

这是我的gulpfile.js

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

gulp.task('download-selenium', function(){
  download('https://selenium.googlecode.com/files/selenium-server-2.39.0.zip')
    .pipe(unzip.Extract({ path: 'selenium' }))
    .pipe(gulp.dest("selenium"));
});

当我启动它时,我遇到以下问题:

$ gulp download-selenium
[gulp] Using file /Users/toutpt/makina/nmd/carteeco/mockup/gulpfile.js
[gulp] Working directory changed to /Users/toutpt/makina/nmd/carteeco/mockup
[gulp] Running 'download-selenium'...
[gulp] Errored 'download-selenium' in 9.08 ms Cannot pipe. Not readable.

/Users/toutpt/makina/nmd/carteeco/mockup/node_modules/gulp/node_modules/orchestrator/index.js:153
            throw err;
                  ^
Error: Cannot pipe. Not readable.
    at Extract.Writable.pipe (_stream_writable.js:125:22)
    at Gulp.gulp.task.server (/Users/toutpt/makina/nmd/carteeco/mockup/gulpfile.js:99:6)
    at module.exports (/Users/toutpt/makina/nmd/carteeco/mockup/node_modules/gulp/node_modules/orchestrator/lib/runTask.js:31:7)
    at Gulp.Orchestrator._runTask (/Users/toutpt/makina/nmd/carteeco/mockup/node_modules/gulp/node_modules/orchestrator/index.js:273:3)
    at Gulp.Orchestrator._runStep (/Users/toutpt/makina/nmd/carteeco/mockup/node_modules/gulp/node_modules/orchestrator/index.js:214:10)
    at Gulp.Orchestrator.start (/Users/toutpt/makina/nmd/carteeco/mockup/node_modules/gulp/node_modules/orchestrator/index.js:134:8)
    at Gulp.run (/Users/toutpt/makina/nmd/carteeco/mockup/node_modules/gulp/index.js:20:14)
    at /usr/local/lib/node_modules/gulp/bin/gulp.js:132:19
    at process._tickCallback (node.js:415:13)
    at Function.Module.runMain (module.js:499:11)

那我怎样才能提取下载的文件?

2 个答案:

答案 0 :(得分:3)

请记住,gulp使用Streams作为文件。 npm unzip不会将可管道的流作为输出发送。

对于这种情况,您最好不要使用gulp.dest,而是使用解压缩提取路径。

试试这个:

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

gulp.task('download-selenium', function(){
  download('https://selenium.googlecode.com/files/selenium-server-2.39.0.zip')
    .pipe(unzip.Extract({ path: './selenium' }));
});

答案 1 :(得分:0)

gulp-download似乎不再维护,gulp-gunzip有更新的示例:

var gulp = require('gulp')
var request = require('request')
var source = require('vinyl-source-stream')
var gunzip = require('gulp-gunzip')
var untar = require('gulp-untar')

gulp.task('default', function () {
  return request('http://example.org/some-file.tar.gz')
  .pipe(source('some-file.tar.gz'))
  .pipe(gunzip())
  .pipe(untar())
  .pipe(gulp.dest('output'))
})