ZIP ファイルに大量のファイル (ある場合は 2700 以上、場合によっては数千になることもあります) を追加する Gulp タスクがあります。コードは次のとおりです。
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)
したがって、ZIPに書き込む前に2000以上のファイルを同時に開くことはお勧めできません。
すべてのファイルを開かずに ZIP ファイルを書き込むようにするにはどうすればよいですか?
ありがとう。
情報: node 5.5.0 / npm 3.8.5 / archiver 1.0.0 / windows