Adm Zip 将文件压缩为目录

Adm Zip zipping files as directories

我正在尝试使用 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

来自 adm-zip 的 wiki

[void] addLocalFile(String localPath, String zipPath)

将文件从磁盘添加到存档。

[void] addLocalFolder(String localPath, String zipPath)

将本地目录及其所有嵌套文件和目录添加到存档

您似乎错过了第二个参数,即 zipPath。

所以我做了一些挖掘: 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 or fs.readFileSync

var zip = new admZip();
var fs=require('fs-extra');
zip.addFile('NGINX/app.js',fs.readFileSync('./app.js'),'',0644);
zip.writeZip("./files.zip");