Muszę spakować cały katalog za pomocą Node.js. Obecnie używam node-zip i za każdym razem, gdy proces jest uruchamiany, generuje nieprawidłowy plik ZIP (jak widać z tego problemu na Github ).
Czy jest inna, lepsza opcja Node.js, która pozwoli mi spakować katalog?
EDYCJA: Skończyło się na używaniu archiwizatora
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);
};
przykładowa wartość parametrów:
dir = /tmp/jsd-<randomstring>/
name = <randomstring>
AKTUALIZACJA: Dla tych, którzy pytają o implementację, której użyłem, oto link do mojego downloadera :
zip
polecenie unix zawiera całą hierarchię folderów nadrzędnych bieżącego katalogu roboczego w spakowanym pliku. To może być dla ciebie w porządku, to nie dla mnie. Również zmiana bieżącego katalogu roboczego w child_process w jakiś sposób nie wpływa na wyniki. 2) Aby rozwiązać ten problem, musisz użyć, pushd
aby wskoczyć do folderu, który chcesz spakować zip -r
, ale ponieważ pushd
jest wbudowany w bash, a nie / bin / sh, musisz również użyć / bin / bash. W moim przypadku nie było to możliwe. Tylko jedno ostrzeżenie.
child_process.exec
API węzła @johnozbay pozwala określić cwd, z którego chcesz uruchomić polecenie. Zmiana CWD rozwiązuje problem hierarchii folderów nadrzędnych. Rozwiązuje również problem braku potrzeby pushd
. W pełni polecam child_process.