我正在尝试使用Adm-Zip
将文件打包成zip文件var AdmZip = require('adm-zip');
var pathToZip = 'build/release/Ext.zip';
var zip = new AdmZip();
zip.addLocalFile('background.js');
zip.addLocalFile('chrome_ex_oauth.html');
zip.addLocalFolder('images');
zip.writeZip(pathToZip);
但是,所有文件都将作为文件夹添加到zip中,并且实际内容不会被压缩。
入门参考如下,这似乎是一个非常简单的例子,它没有按预期工作。我究竟做错了什么? https://github.com/cthackers/adm-zip/wiki/ADM-ZIP-Introduction
答案 0 :(得分:14)
所以我做了一些挖掘: https://github.com/cthackers/adm-zip/blob/master/adm-zip.js#L275
addFile最终由addLocalFile调用,这似乎是发生错误的地方,特别是line 281,它检查ZipEntry是否是一个目录。正在应用错误的标志。
为了解决这个问题,我最终手动调用了addFile并自己指定了属性,这样它就不会依赖于自动检测并错误地将文件标记为目录。
addFile(filePathInArchive, fileBuffer, '', 0644 << 16);
要自己获取fileBuffer,您可以使用fs.readFile或fs.readFileSync
答案 1 :(得分:0)
var zip = new admZip();
var fs=require('fs-extra');
zip.addFile('NGINX/app.js',fs.readFileSync('./app.js'),'',0644);
zip.writeZip("./files.zip");
答案 2 :(得分:-1)
来自adm-zip的wiki:
[void] addLocalFile(String localPath,String zipPath)
将磁盘中的文件添加到存档中。
[void] addLocalFolder(String localPath,String zipPath)
将本地目录及其所有嵌套文件和目录添加到存档
因为看起来你错过了第二个参数,即zipPath。