Ich muss ein ganzes Verzeichnis mit Node.js komprimieren. Ich verwende derzeit Node-Zip und jedes Mal, wenn der Prozess ausgeführt wird, wird eine ungültige ZIP-Datei generiert (wie Sie aus diesem Github-Problem ersehen können ).
Gibt es eine andere, bessere Node.js-Option, mit der ich ein Verzeichnis komprimieren kann?
EDIT: Am Ende habe ich Archiver verwendet
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);
};
Beispielwert für Parameter:
dir = /tmp/jsd-<randomstring>/
name = <randomstring>
AKTUALISIEREN: Für diejenigen, die nach der von mir verwendeten Implementierung fragen, ist hier ein Link zu meinem Downloader :
zip
Befehl enthält die gesamte übergeordnete Ordnerhierarchie des aktuellen Arbeitsverzeichnisses in der komprimierten Datei. Das könnte für dich in Ordnung sein, es war nicht für mich. Auch das Ändern des aktuellen Arbeitsverzeichnisses in child_process wirkt sich irgendwie nicht auf die Ergebnisse aus. 2) Um dieses Problem zu lösen, müssen Sie pushd
in den Ordner springen, den Sie komprimieren möchten, und zip -r
da er pushd
in bash und nicht in / bin / sh integriert ist, müssen Sie auch / bin / bash verwenden. In meinem speziellen Fall war dies nicht möglich. Nur ein Kopf hoch.
child_process.exec
API von @johnozbay node können Sie den cwd angeben, von dem aus Sie den Befehl ausführen möchten. Durch Ändern des CWD wird das Problem der übergeordneten Ordnerhierarchie behoben. Es behebt auch das Problem, dass es nicht benötigt wird pushd
. Ich kann child_process nur empfehlen.