Создание zip-архива из папки и сохранение структуры с помощью Node.js

Я пытаюсь использовать Node.js для создания zip-файла из существующей папки и сохранения структуры.

Я надеялся, что будет простой модуль, позволяющий такие вещи:

archiver.create("../folder", function(zipFile){ 
    console.log('et viola');
});

но я не могу найти ничего подобного!

Я гуглил, и лучшее, что я нашел на данный момент, это zipstream, но, насколько я могу судить, нет способа сделать то, что я хочу. Я действительно не хочу заходить в утилиты командной строки, так как приложение должно быть кроссплатформенным.

Любая помощь будет принята с благодарностью.

Благодарю.

3 ответа

Решение

Он не полностью свободен от кода, но вы можете использовать node-native-zip вместе с folder.js. Использование:

function zipUpAFolder (dir, callback) {
    var archive = new zip();

    // map all files in the approot thru this function
    folder.mapAllFiles(dir, function (path, stats, callback) {
        // prepare for the .addFiles function
        callback({ 
            name: path.replace(dir, "").substr(1), 
            path: path 
        });
    }, function (err, data) {
        if (err) return callback(err);

        // add the files to the zip
        archive.addFiles(data, function (err) {
            if (err) return callback(err);

            // write the zip file
            fs.writeFile(dir + ".zip", archive.toBuffer(), function (err) {
                if (err) return callback(err);

                callback(null, dir + ".zip");
            });                    
        });
    });    
}

Это можно сделать еще проще, используя встроенную функцию узла execfile. Он порождает процесс и выполняет команду zip через ОС изначально. Все просто работает.

var execFile = require('child_process').execFile;

execFile('zip', ['-r', '-j', zipName, pathToFolder], function(err, stdout) {
        console.log(err);
        logZipFile(localPath);
    });

-J помечает "путь" для пути к файлу, если вы архивируете sibdirectory и не хотите чрезмерного вложения в zip-файл.

Вот некоторая документация по execfile. Вот справочная страница для почтового индекса.

Using Easy-zip, npm install easy-zip, ты можешь сделать:

var zip5 = new EasyZip();
zip5.zipFolder('../easy-zip',function(){
    zip5.writeToFile('folderall.zip');
});
Другие вопросы по тегам