Adm Zip файлы в качестве каталогов

Я пытаюсь упаковать файлы в zip файл, используя Adm-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

Ответ 1

Итак, я сделал рытье: https://github.com/cthackers/adm-zip/blob/master/adm-zip.js#L275

addFile в конечном итоге вызывается addLocalFile, и похоже, что происходит ошибка, а именно на строке 281, где он проверяет, является ли ZipEntry каталогом. Применяются неправильные флаги.

Чтобы обойти это, я в конечном итоге вызвал addFile вручную и сам определил атрибуты, чтобы он не полагался на автоматическое обнаружение и некорректно отображал файлы как каталоги.

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

Чтобы получить файлBuffer самостоятельно, вы можете использовать fs.readFile или fs.readFileSync

Ответ 2

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

Ответ 3

Из wiki adm-zip:

[void] addLocalFile (String localPath, String zipPath)

Добавляет файл с диска в архив.

[void] addLocalFolder (String localPath, String zipPath)

Добавляет локальный каталог и все его вложенные файлы и каталоги в архив

Как вам кажется, вы пропустите второй параметр, который является zipPath.