我有一個Gulp任務,我在ZIP文件中添加大量文件(在一種情況下超過2700個,但在其他一些情況下可能會有幾千個)。其代碼如下:如何創建一個包含大量文件的Gulp ZIP文件?
const fs = require('fs');
const archiver = require('archiver')('zip');
let zip = fs.createWriteStream('my-archive.zip');
return gulp.src('app/**/*')
.pipe(through.obj((file, encoding, cb) => {
let pathInZip = '...';
if (!isADirectory(file.path)) { // Do not zip the directory itself
archiver.append(fs.createReadStream(file.path), {
name: pathInZip,
mode: fs.statSync(file.path)
});
}
cb(null, file);
}, cb => {
// Now create the ZIP file!
archiver.pipe(zip);
archiver.finalize();
cb();
}));
此代碼適用於小項目,但是當它與超過2000個文件的交易,我得到以下錯誤:
events.js:154
throw er; // Unhandled 'error' event
^
Error: EMFILE: too many open files, open 'd:\dev\app\some\file'
at Error (native)
所以我的理解是有2000+在寫入ZIP文件之前同時打開的文件不是一個好主意。
如何在不需要打開所有文件的情況下要求編寫ZIP文件?
謝謝。
的信息:節點5.5.0/3.8.5 NPM/archiver 1.0.0 /窗口
'archiver.append'接受'callback'作爲最後一個參數,也許嘗試關閉流呢? – jjm