>  기사  >  웹 프론트엔드  >  GitHub_javascript 기술에 대한 몇 가지 실용적인 JavaScript 파일 압축 및 압축 해제 라이브러리에 대한 권장 사항

GitHub_javascript 기술에 대한 몇 가지 실용적인 JavaScript 파일 압축 및 압축 해제 라이브러리에 대한 권장 사항

WBOY
WBOY원래의
2016-05-16 15:10:493360검색

기존 archive 및 unarchive 폴더 전체를 프로젝트에서 사용해야 합니다. 해결책을 찾을 때 주로 adm-zip, JSZip, archiver 등 일부 인기 있는 라이브러리를 사용해 보았습니다.

1.adm-zip
을 사용하세요.
adm-zip은 하나 이상의 파일 또는 전체 폴더의 보관 및 보관 해제 기능을 지원하므로 사용이 매우 간단하고 편리합니다.

  var adm_zip = require('adm-zip');

  //creating archives
  var zip = new adm_zip(); 
  zip.addLocalFolder('archiver'); 
  zip.writeZip('adm/adm-archive.zip'); 

  //extracting archives 
  var unzip = new adm_zip('adm/adm-archive.zip'); 
  unzip.extractAllTo("adm/adm-unarchive/", /*overwrite*/true);

장점과 단점:
1. 압축과 압축 해제를 동시에 구현하며, 경로만 제공되면 기존 파일이나 폴더에 대해 작업이 가능하며 많은 인터페이스를 구현하고 사용이 쉽습니다.
2. 자체적으로 버그가 있는 경우가 있습니다. 압축을 푼 파일을 원본 파일로 복원할 수 없는 경우가 있습니다. 시간이 지남에 따라 이러한 버그가 수정되기를 바랍니다.


2.JSZip
을 사용하세요.
이 라이브러리를 사용할 때 zip 객체에 파일을 하나씩 추가해야 하고, 내용을 수동으로 추가한 후 파일 쓰기 작업을 사용하여 메모리에 있는 zip 객체를 물리적 저장소로 변환해야 합니다. 따라서 전체 폴더에 대한 것이라면 매우 번거롭고 폴더를 순회해야 합니다.

var JSZip = require("jszip");
var fs = require("fs");

var zip = new JSZip();

var file_content = fs.readFileSync('archive/a.txt');


zip.file("a.txt",file_content);

var data = fs.readFileSync("archive/img/pic.jpeg");
zip.file("img/pic.jpeg", data, {base64: true});

var zipfolder = zip.generate({type:"nodebuffer"});

fs.writeFile("jszip.zip", zipfolder, function(err) {
  if (err) throw err;
});

JSZip에도 폴더 방식이 있지만 zip 객체 내부의 가상 경로를 전환하는 데만 사용됩니다. 예를 들어 zip.folder("img").file('a.txt') 를 추가하는 것입니다. img 하위 디렉터리를 zip 에 추가하고 아래에 a.txt를 생성하면 효과는 zip.file("img/a.txt")과 동일합니다. 여기서는 파일의 내용을 수동으로 추가해야 한다는 점에 유의해야 합니다. zip.file("a.txt")일 경우 zip 개체에 빈 내용이 포함된 txt 파일만 생성됩니다. 메모리에 존재하는 경우 실제로 디스크에 저장되기 전에 파일에 기록되어야 합니다.

장점과 단점:
1. 실시간으로 수신된 일부 데이터를 zip으로 변환하는 데 더 적합합니다. 2. 기존 폴더를 조작하는 방식이 불편합니다. zip 개체에 내용을 하나씩 추가한 후 파일로 변환해야 합니다.
3. 코딩에 주의가 필요한 부분이 많습니다.
4. 압축 기능만 있습니다.


3. archiver를 사용하고 압축 해제
이 조합은 제가 사용한 마지막 조합입니다. 아카이버는 매우 강력하며 기존 폴더를 압축하려면 경로만 제공하면 됩니다. 압축:

var fs = require('fs');
var archiver = require('archiver');

var output = fs.createWriteStream('archiver-unzip.zip');
var archive = archiver('zip');

archive.on('error', function(err){
  throw err;
});

archive.pipe(output);
archive.bulk([
  { src: ['archiver/**']}
]);
archive.finalize();

압축해제:

var fs = require("fs");
var unzip = require("unzip");

fs.createReadStream('archiver-unzip.zip').pipe(unzip.Extract({ path: 'unarchive' }));

장점과 단점:
1. 오랫동안 시도되어 버그가 적습니다.
2. 사용하기 쉽고 폴더를 이동할 필요가 없습니다.
3. 압축이나 압축 해제만 제공하며 두 기능을 모두 제공하지는 않습니다. (그래서 adm-zip은 사실 매우 유용하지만 버그가 단점이군요...)

어제 찾은 도서관 중 일부입니다. 다른 도서관도 추천해 주세요

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.