182 votes

Besoin de ZIPer un répertoire entier en utilisant Node.js

J'ai besoin de zipper un répertoire entier en utilisant Node.js. J'utilise actuellement node-zip et, à chaque fois que le processus s'exécute, il génère un fichier ZIP invalide (comme vous pouvez le voir dans la section ce problème Github ).

Existe-t-il une autre option Node.js, meilleure, qui me permette de mettre un répertoire sous forme de ZIP ?

EDIT : J'ai fini par utiliser archiveur

writeZip = function(dir,name) {
var zip = new JSZip(),
    code = zip.folder(dir),
    output = zip.generate(),
    filename = ['jsd-',name,'.zip'].join('');

fs.writeFileSync(baseDir + filename, output);
console.log('creating ' + filename);
};

valeur d'échantillon pour les paramètres :

dir = /tmp/jsd-<randomstring>/
name = <randomstring>

UPDATE : Pour ceux qui s'interrogent sur la mise en œuvre que j'ai utilisée, Voici un lien vers mon téléchargeur :

9voto

Sam Ghaderyan Points 124

Pour inclure tous les fichiers et répertoires :

archive.bulk([
  {
    expand: true,
    cwd: "temp/freewheel-bvi-120",
    src: ["**/*"],
    dot: true
  }
]);

Il utilise la méthode node-glob( https://github.com/isaacs/node-glob ) en dessous, donc toute expression correspondante compatible avec cela fonctionnera.

5voto

tao Points 500

Depuis archiver n'est pas compatible avec la nouvelle version de webpack depuis longtemps, je recommande l'utilisation de zip-lib .

var zl = require("zip-lib");

zl.archiveFolder("path/to/folder", "path/to/target.zip").then(function () {
    console.log("done");
}, function (err) {
    console.log(err);
});

4voto

HectorC Points 9

Comme aujourd'hui, j'utilise AdmZip et cela fonctionne très bien :

import AdmZip = require('adm-zip');
export async function archiveFile() {
  try {
    const zip = new AdmZip();
    const outputDir = "/output_file_dir.zip";
    zip.addLocalFolder("./yourFolder")
    zip.writeZip(outputDir);
  } catch (e) {
    console.log(`Something went wrong ${e}`);
  }
}

4voto

Xiaoxin Points 71

Adm-zip a des problèmes pour simplement compresser une archive existante https://github.com/cthackers/adm-zip/issues/64 ainsi que la corruption avec la compression des fichiers binaires.

J'ai également rencontré des problèmes de corruption de la compression avec node-zip. https://github.com/daraosn/node-zip/issues/4

node-archiver est le seul qui semble bien fonctionner pour compresser mais il n'a pas de fonctionnalité de décompression.

4voto

Raf Points 2238

Pour acheminer le résultat vers l'objet de réponse (scénarios où il est nécessaire de télécharger le zip plutôt que de le stocker localement).

 archive.pipe(res);

Les conseils de Sam pour accéder au contenu du répertoire ont fonctionné pour moi.

src: ["**/*"]

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X