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
3 ответа
Поэтому я немного покопался: 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
var zip = new admZip();
var fs=require('fs-extra');
zip.addFile('NGINX/app.js',fs.readFileSync('./app.js'),'',0644);
zip.writeZip("./files.zip");
Из вики adm-zip:
[void] addLocalFile (String localPath, String zipPath)
Добавляет файл с диска в архив.
[void] addLocalFolder (String localPath, String zipPath)
Добавляет локальный каталог и все его вложенные файлы и каталоги в архив
Похоже, вы пропустили второй параметр - zipPath.