我试过以下代码:
require( 'isomorphic-fetch' ); const fetchMock = require( 'fetch-mock' ), fsp = require( 'fs-promise' ), unzip = require( 'unzip' ), rimraf = require( 'rimraf-then' ), path = require( 'path' ); let zipLink = 'https://github.com/stevemao/left-pad/archive/master.zip', out = 'left-pad-master'; // Careful: lib might be removed at any moment. fetchMock.get( zipLink, fsp.createReadStream( path.join( __dirname, 'left-pad-master.zip' ) ) ); rimraf( out ) .then( () => fetch( zipLink ) ) .then( response => { return new Promise( ( resolve, reject ) => { // For example purpose, just parse zip file, and log each entry. response.body.pipe( unzip.Parse() ) .on( 'entry', ( entry ) => console.log( entry.path ) ) .on( 'close', resolve ) .on( 'error', reject ); } ); } ) .then( () => console.log( 'done' ) ) .catch( console.log );
但它抛出:
Error: invalid signature: 0x725f227b at C:\dev\unzip-mock\node_modules\unzip\lib\parse.js:59:13 at runCallback (timers.js:628:20) at tryOnImmediate (timers.js:601:5) at processImmediate [as _immediateCallback] (timers.js:578:5)
如果你注释掉fetchMock.get
电话,并使用真实的电话,fetch
它运作良好.
代码可在https://github.com/mlewand/unzip-mock-example获得