15

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

4

3 回答 3

15

所以我做了一些挖掘: https ://github.com/cthackers/adm-zip/blob/master/adm-zip.js#L275

addFile 最终由 addLocalFile 调用,这似乎是发生错误的地方,特别是在第 281 行,它检查 ZipEntry 是否为目录。应用了错误的标志。

为了解决这个问题,我最终手动调用了 addFile 并自己指定了属性,这样它就不会依赖自动检测并将文件错误地标记为目录。

addFile(filePathInArchive, fileBuffer, '', 0644 << 16);

要自己获取 fileBuffer,可以使用fs.readFilefs.readFileSync

于 2016-03-14T14:24:06.910 回答
1
var zip = new admZip();
var fs=require('fs-extra');
zip.addFile('NGINX/app.js',fs.readFileSync('./app.js'),'',0644);
zip.writeZip("./files.zip");
于 2018-01-18T09:00:32.797 回答
1

来自 adm-zip 的wiki

[void] addLocalFile(String localPath, String zipPath)

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

[void] addLocalFolder(String localPath, String zipPath)

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

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

于 2015-12-16T15:29:24.887 回答