Tôi cần nén toàn bộ thư mục bằng Node.js. Tôi hiện đang sử dụng node-zip và mỗi lần quá trình chạy nó tạo ra một tệp ZIP không hợp lệ (như bạn có thể thấy từ sự cố Github này ).
Có tùy chọn Node.js khác tốt hơn cho phép tôi ZIP lên một thư mục không?
CHỈNH SỬA: Tôi đã kết thúc bằng cách sử dụng trình lưu trữ
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);
};
giá trị mẫu cho các tham số:
dir = /tmp/jsd-<randomstring>/
name = <randomstring>
CẬP NHẬT: Đối với những người hỏi về cách triển khai mà tôi đã sử dụng, đây là liên kết đến trình tải xuống của tôi :
zip
Lệnh unix bao gồm tất cả hệ thống phân cấp thư mục mẹ của thư mục làm việc hiện tại trong tệp nén. Điều này có thể ổn cho bạn, nó không phù hợp với tôi. Ngoài ra, việc thay đổi thư mục làm việc hiện tại trong child_process bằng cách nào đó không ảnh hưởng đến kết quả. 2) Để khắc phục vấn đề này, bạn phải sử dụng pushd
để nhảy vào thư mục bạn sẽ nén và zip -r
, nhưng vì pushd
được tích hợp vào bash chứ không phải / bin / sh nên bạn cần sử dụng / bin / bash. Trong trường hợp cụ thể của tôi, điều này là không thể. Chỉ cần một cái nhìn lên.
child_process.exec
cho phép bạn chỉ định cwd từ nơi bạn muốn chạy lệnh. Việc thay đổi CWD sẽ khắc phục được sự cố của hệ thống phân cấp thư mục mẹ. Nó cũng khắc phục sự cố không cần pushd
. Tôi hoàn toàn đề xuất quy trình con.